저는 Python과 PyQt를 배우기 시작합니다. 현재 QDesigner 폼에서 생성 된 Dialog 폼을 사용하여 신호와 슬롯을 연결하는 것과 관련된 매우 기본적인 문제로 싸우고 있습니다. QDialog에서 푸시 버튼을 연결하고 싶습니다. 이 코드는 오류를 생성하지 않습니다. 대화 상자가 예상대로 표시됩니다. 그러나 푸시 버튼을 클릭하면 아무 일도 일어나지 않습니다.PyQt : QDesigner 및 연결 푸시 버튼에서 대화 상자 마무리하기
또는 코드 예제 Ui_Dialog
을 직접 내 대상 클래스 Testdialog
에 포함 시키려고했습니다. 그런 다음 연결이 작동하고있었습니다. 내가 Ui_Dialog
에서 Testdialog
으로 속성을 상속하는 데 오류가있는 것처럼 보입니다. 그리고/또는 대화 상자를 실행하고 싶습니다.
내 주요 프로그램과 같이 보인다 :
from __future__ import unicode_literals
import sys
from PyQt4 import *
from PyQt4 import QtGui
from PyQt4.QtCore import SIGNAL, QObject
import UI_Test
class Testdialog(QtGui.QDialog, UI_Test.Ui_Dialog):
def __init__(self,parent=None):
super(Testdialog, self).__init__(parent)
self.setupUi(self)
print("Connect buttons") # gives the expected output
self.connect(self.pushButton_Ok, SIGNAL("clicked()"), self.clickedOk)
self.connect(self.pushButton_Cancel, SIGNAL("clicked()"), self.clickedCancel)
# Alternativly I have tríed the following without improvement:
# self.pushButton_Ok.clicked.connect(self.clickedOk)
# QObject.connect(self.pushButton_Cancel, SIGNAL("clicked()"), self.clickedCancel)
def clickedCancel(self):
print ("Cancel") # Question: Why is nothing happening here?
def clickedOk(self):
print ("Ok") # Question: Why is nothing happening here?
if True:
qApp = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
u = Testdialog()
u.setupUi(Dialog)
Dialog.exec_()
sys.exit(qApp.exec_())
내가 아무 일도 발생하지 않는 bushbuttons 클릭
. 연결이 작동하지 않는 것 같습니다.내가 뭘 잘못 했니? 어떻게 그걸 고쳐? 그 밖의 무엇을 개선해야합니까?
양식 UI_Test.py
은 QtDesigner 및 pyuic에서 자동으로 생성되므로 별다른 의미가 없습니다. 그래서 기본적으로 (코드에 대한 모든 세부 사항을 이해하지는 못하더라도) 괜찮을 것입니다.
# File: UI_Test.py
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(271, 70)
self.pushButton_Ok = QtGui.QPushButton(Dialog)
self.pushButton_Ok.setGeometry(QtCore.QRect(20, 20, 93, 28))
self.pushButton_Ok.setObjectName(_fromUtf8("pushButton_Ok"))
self.pushButton_Cancel = QtGui.QPushButton(Dialog)
self.pushButton_Cancel.setGeometry(QtCore.QRect(130, 20, 93, 28))
self.pushButton_Cancel.setObjectName(_fromUtf8("pushButton_Cancel"))
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
self.pushButton_Ok.setText(_translate("Dialog", "OK", None))
self.pushButton_Cancel.setText(_translate("Dialog", "Cancel", None))
문제가있는 정확한 위치를 식별하려면 작은 예제를 만들어야합니다. 이 예제에는 문제와 관련이없는 많은 코드가 있습니다. 행운을 빕니다! – Plouff
코멘트 Plouff에 감사드립니다. 'UI_Test.py'파일은 'pyuic'으로 자동 생성됩니다. 기본적으로 여기에 문제가 없어야합니다. 실행중인 예제를 제공하기 위해 추가되었습니다. 'Ud_Dialog'클래스의 코드를 'Testdialog'에 포함하려고했습니다. 이 경우 programm가 작동합니다. 그래서 나는이 문제가 내가 'Testdialog'클래스가 'Ui_Dialog'에서 상속받은 방식으로 발생한다고 예상한다. 또는 Dialog가 메인 클래스에서 실행되는 방식.그래서 불행히도 예제를 줄이고 동일한 행동을 유지할 수있는 방법을 찾지 못했습니다. – BerndGit
좋아, 나는 [link] (http://pyqt.sourceforge.net/Docs/PyQt4/designer.html)의 도움 요청서 (예 2)로 해결할 수있다. 어쨌든 초기 버전이 작동하지 않는 이유는 아직도 이해할 수 없습니다. – BerndGit