2017-09-25 1 views
0

Ich benutze Python 3.6 und PyQt5. Ich habe eine Gui in einer MainWindow Klasse gezeichnet, die eine QComboBox enthält. Ich möchte das Signal currentTextChanged an einen Steckplatz in einem anderen Thread senden. Ich bin relativ neu in Signalen und Slots. Wie würde ich das machen? Würde ein schriftliches Beispiel einer Klasse bevorzugt Ui_MainWindow(object): sendet das Signal an Klasse Threadclass2(QtCore.QThread): Hier ist eine verkürzte Version von meinem Code und was ich will:Wie verbinde ich ein Signal mit einem Steckplatz in einem anderen Thread?

from PyQt5 import QtCore, QtGui, QtWidgets 
from selenium import webdriver 
import time 
import threading 
from bs4 import BeautifulSoup as soup 
import requests 

class Ui_MainWindow(object): 
     def setupUi(self, MainWindow): 
      self.keyworddict = {} 
      self.count = {} 
      MainWindow.setObjectName("MainWindow") 
      MainWindow.resize(698, 581) 
      MainWindow.setMinimumSize(QtCore.QSize(698, 581)) 
      MainWindow.setMaximumSize(QtCore.QSize(698, 581)) 
      palette = QtGui.QPalette() 
      brush = QtGui.QBrush(QtGui.QColor(154, 161, 161)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) 
      brush = QtGui.QBrush(QtGui.QColor(206, 206, 206)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) 
      brush = QtGui.QBrush(QtGui.QColor(214, 214, 214)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) 
      brush = QtGui.QBrush(QtGui.QColor(154, 161, 161)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) 
      brush = QtGui.QBrush(QtGui.QColor(206, 206, 206)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) 
      brush = QtGui.QBrush(QtGui.QColor(214, 214, 214)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) 
      brush = QtGui.QBrush(QtGui.QColor(154, 161, 161)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) 
      brush = QtGui.QBrush(QtGui.QColor(214, 214, 214)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) 
      brush = QtGui.QBrush(QtGui.QColor(214, 214, 214)) 
      brush.setStyle(QtCore.Qt.SolidPattern) 
      palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) 
      MainWindow.setPalette(palette) 
      self.centralWidget = QtWidgets.QWidget(MainWindow) 
      self.centralWidget.setObjectName("centralWidget") 
      self.comboBox = QtWidgets.QComboBox(self.centralWidget) 
      self.comboBox.setGeometry(QtCore.QRect(20, 60, 371, 31)) 
      font = QtGui.QFont() 
      font.setFamily("Yu Gothic") 
      font.setPointSize(16) 
      self.comboBox.setFont(font) 
      self.comboBox.setAcceptDrops(False) 
      self.comboBox.setObjectName("comboBox") 
      self.comboBox.addItem("") 
      self.comboBox.addItem("") 
      MainWindow.setCentralWidget(self.centralWidget) 
      self.retranslateUi(MainWindow) 

     def retranslateUi(self, MainWindow): 
      _translate = QtCore.QCoreApplication.translate 
      MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
      self.comboBox.setItemText(0, _translate("MainWindow", "Jackets")) 
      self.comboBox.setItemText(1, _translate("MainWindow", "Shirts")) 
class Threadclass2(QtCore.QThread): 
    def __init__(self, parent = None): 
     super(Threadclass2, self).__init__(parent) 

    def run(self): 
     print("awd") 

if __name__ == "__main__": 
    import sys 

    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

Vor diesem eine Taste, um den Faden, während der gui noch beginnen wird gezeichnet von der Mainwidnow-Klasse

+0

Bis zu einem gewissen Grad kann dies davon abhängen, wie der Multithread-Teil Ihres Codes strukturiert ist. Sie sollten daher einen Beispielcode aus Ihrer Anwendung hinzufügen. – ekhumoro

+0

Was ist der Unterschied zwischen dieser Frage und Ihrer vorherigen Frage https://stackoverflow.com/questions/46382780/how-to-pass-a-qtwidget-current-text-into-a-qthread? – eyllanesc

+0

Ich nahm Ihren Rat und stellte eine genauere Frage. Du hast nicht auf meinen vorherigen Fragekommentar geantwortet. Ich weiß nicht, wie man ein Signal an einen Thread-Slot anschließt. – Kermit

Antwort

1

@ eyllanesc Lösung funktioniert. Das Hinzufügen dieser Klasse ist der Schlüssel. Prost

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): 
def __init__(self, parent=None): 
    QtWidgets.QMainWindow.__init__(self, parent) 
    self.setupUi(self) 

    self.thread = Threadclass2(self) 
    self.comboBox.currentTextChanged.connect(self.thread.setText) 
    self.thread.start() 
+0

Wenn du deinen Code nicht angezeigt hast, hast du viel Zeit verloren, wenn du es gezeigt hast, könntest du sofort helfen.: P – eyllanesc

Verwandte Themen