프로그램 끝에 QtGui.QLineEdit.setText()를 사용하여 일부 문자열을 설정하고 프로그램 시작 부분에서 QtGui.QLineEdit.clear()를 사용하여 문자열을 지우려고했습니다. . 그러나 문자열을 지우지 않습니다. 내가하고 싶은 것은 프로그램의 시작 부분에있는 내용을 지우고 프로그램이 실행 중임을 표시하고 프로그램이 끝날 때 프로그램의 값과 상태를 설정하는 것입니다. 이 기능을 수행하기위한 제안이나 다른 방법이 있습니까? 고맙습니다.Python Pyqt QtGui.QLineEdit.clear()
다음은 내 코드입니다 :
def __init__(self):
self.left = QtGui.QFrame()
self.read_back_B0_to_B39 = QtGui.QTextEdit(self.left)
self.first_read_Value_error = QtGui.QLineEdit(self.left)
self.B0_B39_match = QtGui.QLineEdit(self.left)
def first_burn_margin_read(self):
# try to clear the content
self.first_read_Value_error.clear()
self.read_back_B0_to_B39.clear()
self.B0_B39_match.clear()
# E3646 power supply setup
power_channel = 1; power_range = 'LOW'; power_voltage = 3.3; power_current = 0.3
self.power1_setup(power_channel, power_range, power_voltage, power_current)
self.power1_on_off(False)
self.power1_on_off(True)
# E3631 power supply setup
power_channel = 2; power_voltage = 7; power_current = 0.3
self.power2_setup(power_channel, power_voltage, power_current)
self.power2_on_off(False)
self.power2_on_off(True)
# 81130A setup
fun_channel = 1; fun_frequency = 100; fun_duty_cycle = 50; fun_vlow = 0; fun_vhigh = 0.8
self.fun_setup(fun_channel, fun_frequency, fun_duty_cycle, fun_vlow, fun_vhigh)
self.fun_on_off(fun_channel, 1)
time.sleep(1)
value = self.Byte0_to_Byte39.toPlainText()
write_value = []*40
for i in range(0,40):
hex_express = str(value[5*i:5*i+4])
hex_int = int(hex_express, 16)
write_value.append(hex_int)
self.i2c_write(128, write_value)
time.sleep(2)
try:
burn_result = self.i2c_read(128, 40)
self.first_read_Value_error.setText('No')
if write_value[1:] == burn_result:
B46 = int(str(self.B46_OTP_start_address_1.text()), 16)
B47 = int(str(self.B47_OTP_stop_address_1.text()), 16)
B48 = int(str(self.B48_Ram_burn_start_address_1.text()), 16)
burn_registers = [B46, B47, B48]
self.i2c_write(174, burn_registers)
time.sleep(0.1)
# # Burn OTP
self.i2c_write(173, [0x8C])
time.sleep(0.5)
self.i2c_write(173, [0x0C])
time.sleep(0.5)
# Margin 1 read
self.i2c_write(128, [0x00]*40)
time.sleep(0.5)
self.i2c_write(177, [0x00])
time.sleep(0.1)
self.i2c_write(173, [0x4C])
time.sleep(0.1)
self.i2c_write(173, [0x0C])
time.sleep(1)
margin_read = self.i2c_read(128, 40)
row1 = ''
row2 = ''
row3 = ''
row4 = ''
for i in range(0,10):
row1 += str(hex(margin_read[i])) + ' '
row2 += str(hex(margin_read[i+10])) + ' '
row3 += str(hex(margin_read[i+20])) + ' '
row4 += str(hex(margin_read[i+30])) + ' '
read_back = """%s
%s
%s
%s
""" % (row1, row2, row3, row4)
self.read_back_B0_to_B39.setText(read_back)
if write_value[1:] != margin_read:
self.log.warn('The burning is not correct. Please check the setup and do it again.')
self.B0_B39_match.setText('It is not matched.')
else:
self.log.info('1st pass burn and margin 1 read are successful, please go on.')
self.B0_B39_match.setText('It is matched.')
else:
self.log.warn('The burning is not correct. Please check the setup and do it again.')
except ValueError:
self.first_read_Value_error.setText('Yes')
'first_burn_margin_read'가 GUI 클릭 (예 : 버튼 클릭에 대한 응답)에서 호출 된 경우 메소드가 반환 된 후에 만 GUI가 업데이트되므로 실행 중에 변경 사항이 표시되지 않으며 GUI가 차단됩니다. Qt에서 스레딩이 어떻게 작동하는지 이해하려면 [this] (http://doc.qt.io/qt-5/thread-basics.html)을 읽어야합니다. – mata
불편을 끼쳐 드려 죄송합니다. 다른 방법으로도이 방법으로 작동합니다. 혼란스러워서 내가하고 싶은 일을 성취하기위한 제안이 있습니까? 고맙습니다. – Dogod
Qt 위젯 클래스의 메소드가 별도의 스레드에서 호출되어서는 안되기 때문에 이와 같이 장기간 실행되는 함수는 별도의 스레드에서 실행해야하며 Qts 신호/슬롯 메커니즘을 사용하여 GUI를 업데이트해야합니다. [이 링크] (http://doc.qt.io/qt-5/threads-technologies.html)에는 Qt에서 사용 가능한 스레딩 기술에 대한보다 자세한 설명이 있습니다. – mata