2016-09-09 1 views
0

のブールオブジェクトを接続しているのは、私はこのコードのスニペットを持っているとしましょう:pyqtSignalは()の代わりにSTR

from PyQt5.QtWidgets import QMainWindow 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWidgets import QDialog 
from PyQt5.QtCore import pyqtSignal 
from ui_helloworld import Ui_MainWindow 
from ui_hellodialog import Ui_Hi 
from sys import argv 
from sys import exit 


class MainWindow(QMainWindow): 

    update = pyqtSignal(str) 

    def __init__(self): 

     super(MainWindow, self).__init__() 

     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.h = HelloDialog() 

     self.ui.pushButton.clicked.connect(self.update_label) 
     self.ui.doIt.clicked.connect(self.h.update_label) 

    def update_label(self): 
     self.h.show() 

    def update_label_hello(self, msg): 

     self.update.emit(msg) 


class HelloDialog(QDialog): 

    def __init__(self): 

     super(HelloDialog, self).__init__() 
     self.ui = Ui_Hi() 
     self.ui.setupUi(self) 

    def update_label(self, msg): 

     print msg 

     # Crashes the program: 
     # TypeError: setText(self, str): argument 1 has unexpected type 'bool' 
     # >> self.ui.label.setText(msg) 


     self.ui.label.setText("Hello world!") 


def main(): 

    app = QApplication(argv) 

    window = MainWindow() 
    window.show() 

    exit(app.exec_()) 


if __name__=="__main__": 
    main() 

それはかなり簡単です。 2つのウィンドウ、1つはQMainWindow、もう1つはQDialogです。

  • pushButtonHelloDialogのスロットがupdateからブールを受信して​​いること、HelloDialog
  • doIt

問題があるupdate信号を発する開き:メインウィンドウは、2つのボタン押しボタンとのdoItを有します信号はMainWindowですが、strオブジェクトとして宣言しました。

update_labelスロットにboolのオブジェクトがあり、strのオブジェクトではないのはなぜですか?

localhost :: Documents/Python/qt » python main.py 

{ push `doIt` object } 

False 

Ui_MainWidowUi_Hiクラスはpyuic5を生成しています。

答えて

0

self.h.update_labelに直接接続する必要はありませんでした。 MainWindow

のinit:

def __init__(self): 

    super(MainWindow, self).__init__() 

    self.ui = Ui_MainWindow() 
    self.ui.setupUi(self) 
    self.h = HelloDialog() 

    self.ui.pushButton.clicked.connect(self.update_label_) 
    self.ui.doIt.clicked.connect(self.update_label_hello) 

    self.update.connect(self.h.update_label) 
私はメインウィンドウ内のメソッドに接続しなければならなかった doItupdate_label_helloと呼ばれ、そのように HelloDialog

のスロットにpyqtSignalを接続し、最終結果はこれです