2016-03-24 23 views
0

GUI'miz, temel olarak durum makinesi olan kendi QThread tarafından güncelleştirilen çeşitli Qlabels ve Qtext gruplarından oluşur. Ürünlerim değiştikçe, her bir iş parçacığının bağımsız olarak yeni metinle QLabels/QText grubunu güncellemesi ve arka plan rengini kırmızı, sarı veya yeşil olarak değiştirmesi gerekir. Ben renk değişikliği ile sorunlar yaşıyorum:QTextEdit'in Stil Sayfasını pyqt ile QThread'de Güncelleştirme

Kodu:

red_alert = "QText {Edit font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;bgcolor=red}" 

class TesterThread(QtCore.QThread): 
    updateText = QtCore.pyqtSignal(str) 
    updateColor = QtCore.pyqtSignal(str) 

    def __init__(self, thread_number, parent=None): 
     super(TesterThread, self).__init__(parent) 
     self.color = "red" 
     self.status = "Disconnected" 
     self.t_number = thread_number 
     self.connection = False 
     self.testing = False 
     self.complete = False 

    def run(self): 
     self.tester() 
    def tester(self, restart=False): 
     if restart: 
      logging.debug("Thread {}:Restarting for testing".format(self.t_number)) 
     else: 
      logging.info("Thread {}:Ready for testing".format(self.t_number)) 
     # Init state, no device connected 
     while not self.connection: 
      self.updateText.emit("Status : {}".format(self.status)) 
      self.updateColor.emit("{}".format(thread_gui.red_alert)) 
      self.connection = True 
      self.status = "Connected" 
      self.updateText.emit("Status : {}".format(self.status)) 
      self.testing = True 
     # Device connected, starting test 
     while self.testing: 
      self.status = "Testing" 
      self.updateText.emit("Status : {}".format(self.status)) 
      self.testing = False 
      self.complete = True 
     # Test complete, waiting for unit removal 
     while self.complete and self.connection: 
      self.status = "Reset" 
      self.updateText.emit("Status : {}".format(self.status)) 
      time.sleep(5) 
      self.complete = False 
      self.connection = False 
      self.status = "Disconnected" 
     # Unit remove, restart loop for next test. 
     self.tester(restart=True) 

GUI:

class TestSuiteGUI(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     self._threads = [] 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.com_ports_list = serial_lib.get_com_ports() 
     self.ui.setupUi(self) 
     self.update_comm_fields(self.com_ports_list) 
     logging.info("Spinning up threads...") 
     for num, com_port_chunk in zip(range(1, 25), self.com_ports_list): 
      tester_thread = TesterThread(thread_number=num) 
      status_box = getattr(self.ui, 'status_{}'.format(num)) 
      tester_thread.updateText.connect(status_box.setText) 
      status_box = getattr(self.ui, 'status_{}'.format(num)) 

      tester_thread.updateColor.connect(status_box.setStyleSheet) 

      tester_thread.start() 
      self._threads.append(tester_thread) 
+0

"Sorunlar" ile ne demek istiyorsun? Hata var mı yoksa stil sayfası nasıl beklediğinizi göstermiyor mu? Stil sayfasını bir iş parçacığının dışında ayarlamayı denediniz (belki de Qt Designer'da olduğu gibi)? –

+0

Hata yok (stil sayfasını ayrıştırma gibi). Ne beklediğimi görmüyorum. Evet, önce QTDesigner'da denedim. –

+0

Geçersiz bir stil sayfası verirseniz, bir hata oluşturmaz, yalnızca bir şey yapmayacaktır. Örneğinizde sahip olduğunuz stil sayfasının herhangi bir yazım hatası var mı? Qt Designer'da denedim ve hiçbir şey yapmıyor. –

cevap

1

Kişisel stil geçerli görünmüyor. Ben tahmin ediyorum

QText { 
    Edit font-family:'MS Shell Dlg 2'; 
    font-size:8.25pt; 
    font-weight:400; 
    font-style:normal; 
    bgcolor=red 
} 

Eğer

QTextEdit { 
    font-family: "MS Shell Dlg 2"; 
    font-size: 8.25pt; 
    font-weight: 400; 
    font-style: normal; 
    background-color: red; 
} 

stil değişiklikler yaparken, bunların beklediğiniz şekilde görünmesi emin olmak için Qt Designer onları ilk denemek için yararlıdır

istiyorum.

+0

Cevabınız ve daha önce yaptığım bir hatayı düzeltmemiz düzeltildi. Yaptığım hata, HTML görünümünde arka plan rengini ayarlamaktı. Bu, stil sayfası güncellemesini ya da bir şeyi muhtemelen bastırdı. Bunu kaldırdığımda ve örnek sözdizimini kullandığında, QTDesigner'da doğrulayarak işe yaradı. Teşekkürler. –