2016-03-24 9 views
0

私のGUIはQlabelsとQtextのさまざまなグループで構成されています。これらのグループは基本的に状態マシンである独自のQThreadによって更新されます。私の仕様では、状態が変わるたびに、各スレッドは新しいテキストで独立してQLabels/QTextのグループを更新し、背景色を赤、黄、または緑に変更する必要があります。私は色の変化の問題を抱えている:QThread内のQTextEditのスタイルシートをpyqtで更新する

コード:

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

「問題」とはどういう意味ですか?エラーがありますか、あるいはスタイルシートだけであなたの予想を表示していませんか? Qtデザイナーのように、スレッドの外にスタイルシートを設定しようとしましたか? –

+0

エラーなし(スタイルシートを解析できないなど)ただ私が期待しているものを見ていない。はい、私はQTDesignerで最初に試しました。 –

+0

無効なスタイルシートを指定した場合、エラーは発生せず、何も行われません。あなたの例にあるスタイルシートには、タイプミスがありますか? Qt Designerで試してみましたが、何もしません。 –

答えて

1

あなたのスタイルシートが有効では見えません。

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

私はあなたが欲しい推測しているスタイルシートの変更を行った場合、それは彼らがあなたが期待する方法を見て確認するためにはQt Designerで最初にそれらを試してみることに有用

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

です。

+0

あなたの答えは、私が以前に修正した間違いを修正しました。私が作った間違いは、HTMLビューで背景色を設定していたのでしょう...おそらく、スタイルシートの更新などが抑制されていました。私がそれを削除して、あなたのサンプルシンタックスを使用するとすぐに、QTDesignerで検証して、それが機能しました。ありがとう。 –

関連する問題