2013-11-13 9 views
7

PyQt4のチュートリアル/人間言語で書かれた理解可能なドキュメントは、ほぼすべてです。しかし、PyQt5は、「スロットに接続する」ボタン全体がどのように機能するかを変更しましたが、それを行う方法はまだ分かりません。PyQt5:QPushButtonをスロットに接続するにはどうすればよいですか?

QtDesignerでクイックGUIを行いましたが、QPushButtonとラベルがあります。ボタンをクリックすると、ラベルのテキストが変更されます。 QtDesignerのC++では、2つを簡単に接続できます。しかし、私はすべてのpythonでそれを記述する必要があります。

pyuic5の.uiファイルを.pyファイルに変換します。そこでは、Ui_MainWindowクラスで、私は

QtCore.QMetaObject.connectSlotsByName(MainWindow) 

は正直に言うと、呼ばれているが、この方法の最後で、その後、

self.testButton = QtWidgets.QPushButton(self.centralWidget) 
self.testButton.setObjectName("newGame") 

を次のようにself.buttonを初期化setupUi方法を、見ることができます私はそれが何をするのか、それがどこにつながるのか理解できません。メインクラスの

は、QMainWindowから継承する、私は次のような方法

@pyqtSlot(name='change') 
def change_text(self): 
    self.ui.testLabel.setText("Button Clicked!") 

を書いて、私はそのスロットにボタン信号を接続する方法を見つけ出すことはできません。 pyqt4では、button.clicked.connect(self.change_text)を使って手動で設定することができましたが、わかったように、PyQt5は廃止され、そのような単純な設定を破棄しました。

どうすればいいですか?

答えて

15

「PyQt5がスロット全体にどのように「接続ボタン」が働くかを変えた」というアイデアがどこにあるのか分かりませんが、それは完全に完全に間違っています。容易に公式PyQtはドキュメントから分かるように、そのような変更はありません:

しかし、たとえ任意のドキュメントを読まずに、それはあなた自身のためにテストするのは簡単です。たとえば、次のスクリプトでは、単に最初の2行のコメントを切り替えて、それだけで同じことを実行します。他の点については

# from PyQt5.QtWidgets import (
from PyQt4.QtGui import (
    QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, 
    ) 

class Window(QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.button = QPushButton('Test', self) 
     self.label = QLabel(self) 
     self.button.clicked.connect(self.handleButton) 
     layout = QVBoxLayout(self) 
     layout.addWidget(self.label) 
     layout.addWidget(self.button) 

    def handleButton(self): 
     self.label.setText('Button Clicked!') 

if __name__ == '__main__': 

    import sys 
    app = QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 

:知識のあなたの現在の状態で、私はあなたができると言うでしょうconnectSlotsByNamepyqtSlotは安全に無視してください。彼らはその用途を持っていますが(上記のドキュメントを参照してください)、アプリケーションの95%でそれらを使用する必要はほとんどありません。あなたの特定のケースでは、構文が単純である

self.testButton.clicked.connect(self.change_text) 
    ... 

def change_text(self): 
    self.ui.testLabel.setText("Button Clicked!") 
+5

>あなたは「PyQt5全体が 『スロットに接続ボタンを』どのように動作変更」、それというアイデアを得たところ私にはわかりません完全に完全に間違っています。 私はそこから入手しました:http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html 段落:「古いスタイルの信号とスロット」を見てください。 "QObject.connect()はpyqt5に実装されていません"、そうです。 また、私はそれを実行しようとすると、私はそのようなことを実行する、私は "AttributeError:QPushButtonオブジェクトは、属性の接続を持っていない"取得:( –

+0

待って!私は間違って何かを見つけた!私は前述のリンク(pyqt4_differences)と、eclipseがコード提案に「クリックされた」ことを表示しなかったという事実を示唆していました。私の悪い、私のすべての悪い、返信のおかげで、私は間違っていた:( –

関連する問題