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)
"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)? –
Hata yok (stil sayfasını ayrıştırma gibi). Ne beklediğimi görmüyorum. Evet, önce QTDesigner'da denedim. –
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. –