2016-11-16 95 views
0

我试图通过在程序结束时使用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') 
+0

如果在GUI线程中调用'first_burn_margin_read'(例如响应按钮单击),则只有在方法返回后GUI才会更新,因此在运行时不会看到任何更改,而且GUI将被阻止。您应该阅读[this](http://doc.qt.io/qt-5/thread-basics.html)以了解Qt中的线程是如何工作的。 – mata

+0

对不起,你和我的其他程序在这个方法中的作品之一。所以我很困惑,你有什么建议来实现我想做的事情吗?非常感谢你。 – Dogod

+0

像这样的长时间运行的函数应该在一个单独的线程中运行,并且应该使用Qts信号/槽机制来更新GUI,因为Qt窗口小部件类中的方法不应该从单独的线程调用。 [此链接](http://doc.qt.io/qt-5/threads-technologies.html)对Qt中的可用线程技术有更详细的概述。 – mata

回答

-1

尝试,这也: self.first_read_Value_error.setText( '')。

+0

谢谢,我已经试过了,它没有工作。 – Dogod