私の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)
「問題」とはどういう意味ですか?エラーがありますか、あるいはスタイルシートだけであなたの予想を表示していませんか? Qtデザイナーのように、スレッドの外にスタイルシートを設定しようとしましたか? –
エラーなし(スタイルシートを解析できないなど)ただ私が期待しているものを見ていない。はい、私はQTDesignerで最初に試しました。 –
無効なスタイルシートを指定した場合、エラーは発生せず、何も行われません。あなたの例にあるスタイルシートには、タイプミスがありますか? Qt Designerで試してみましたが、何もしません。 –