2017-11-05 8 views
0

저는 Qt Designer로 2ui를 설계했으며 두 가지를 모두 주 프로그램으로 사용하는 새로운 .py 파일로 가져옵니다. 하나는 메인 윈도우이고 다른 하나는 커스텀 팝업 대화 상자입니다. 아무런 문제없이 MainWindow을 실행할 수있었습니다. 나는 또한 Popup (QDialog, Modal)을 실행할 수 있지만 일단 표시되면 위젯이 응답하지 않는다.PopUp 창에서 위젯이 응답하지 않습니다.

미안하지만 질문을하지만 미안하지만 온라인으로 살펴 본 후에는 작동하지 않을 수 있으며 큰 문제는 컴파일러가 오류를 표시하지 않습니다. 코드가 번거롭지 않게 실행되지만 위젯은 업데이트/응답하지 않습니다

코드가 지저분하면 죄송합니다. 지난 달 Python과 PyQT를 지난 주에 배웠습니다. 여기

import sys 
import _pickle as cPickle 
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QWidget, QAction, QTabWidget,QVBoxLayout 
from PyQt5 import QtCore, QtGui, QtWidgets 
from PedidoUI import Ui_MainWindow 
from Emergente1 import Ui_Dialog 


#I define a PopUp Dialog 
class PopUp(Ui_Dialog): 
    """docstring for PopUp""" 
    def __init__(self,Dialog): 
     Ui_Dialog.__init__(self) 
     self.setupUi(Dialog) 
     self.botonAceptar.clicked.connect(self.AgregarItems) 


#It should add the string "Prueba" as an Item to the list. 
    def AgregarItems(self): 
     self.listWidget.addItem("Prueba") 


#This is the Main Class  
class ProgramaPedido(Ui_MainWindow): 
    def __init__(self, MainWindow): 
     Ui_MainWindow.__init__(self) 
     self.setupUi(MainWindow) 


     self.Dialog = QtWidgets.QDialog() 
     self.ui = PopUp(self.Dialog) 
     self.ui.setupUi(self.Dialog) 

     self.toolButton.clicked.connect(self.open_dialog) 

    #I call the PopUp 
    def open_dialog(self): 

     self.Dialog.exec_() 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    prog = ProgramaPedido(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

은 MainWindow를의 UI입니다 : 여기

는 프로그램의 코드 여기

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(642, 912) 
     MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) 
     MainWindow.setUnifiedTitleAndToolBarOnMac(False) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) 
     self.lineEdit.setGeometry(QtCore.QRect(80, 10, 133, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.label = QtWidgets.QLabel(self.centralwidget) 
     self.label.setGeometry(QtCore.QRect(20, 10, 55, 19)) 
     font = QtGui.QFont() 
     font.setPointSize(12) 
     self.label.setFont(font) 
     self.label.setObjectName("label") 
     self.label_2 = QtWidgets.QLabel(self.centralwidget) 
     self.label_2.setGeometry(QtCore.QRect(20, 510, 81, 21)) 
     font = QtGui.QFont() 
     font.setPointSize(15) 
     self.label_2.setFont(font) 
     self.label_2.setObjectName("label_2") 
     self.botonEnviar = QtWidgets.QPushButton(self.centralwidget) 
     self.botonEnviar.setGeometry(QtCore.QRect(440, 540, 91, 41)) 
     self.botonEnviar.setObjectName("botonEnviar") 
     self.botonDel = QtWidgets.QPushButton(self.centralwidget) 
     self.botonDel.setGeometry(QtCore.QRect(540, 540, 41, 41)) 
     self.botonDel.setObjectName("botonDel") 
     self.label_3 = QtWidgets.QLabel(self.centralwidget) 
     self.label_3.setGeometry(QtCore.QRect(450, 610, 61, 21)) 
     font = QtGui.QFont() 
     font.setPointSize(12) 
     self.label_3.setFont(font) 
     self.label_3.setObjectName("label_3") 
     self.comboBox = QtWidgets.QComboBox(self.centralwidget) 
     self.comboBox.setGeometry(QtCore.QRect(520, 610, 69, 22)) 
     self.comboBox.setObjectName("comboBox") 
     self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget) 
     self.lineEdit_2.setGeometry(QtCore.QRect(440, 640, 181, 20)) 
     self.lineEdit_2.setObjectName("lineEdit_2") 
     self.botonAdd = QtWidgets.QPushButton(self.centralwidget) 
     self.botonAdd.setGeometry(QtCore.QRect(230, 10, 75, 23)) 
     self.botonAdd.setObjectName("botonAdd") 
     self.label_4 = QtWidgets.QLabel(self.centralwidget) 
     self.label_4.setGeometry(QtCore.QRect(20, 840, 101, 16)) 
     self.label_4.setObjectName("label_4") 
     self.BotonAdj = QtWidgets.QPushButton(self.centralwidget) 
     self.BotonAdj.setGeometry(QtCore.QRect(20, 470, 75, 23)) 
     self.BotonAdj.setObjectName("BotonAdj") 
     self.botonAdjT = QtWidgets.QPushButton(self.centralwidget) 
     self.botonAdjT.setGeometry(QtCore.QRect(100, 470, 81, 23)) 
     self.botonAdjT.setObjectName("botonAdjT") 
     self.BotonQuit = QtWidgets.QPushButton(self.centralwidget) 
     self.BotonQuit.setGeometry(QtCore.QRect(190, 470, 81, 23)) 
     self.BotonQuit.setObjectName("BotonQuit") 
     self.listWidget = QtWidgets.QListWidget(self.centralwidget) 
     self.listWidget.setGeometry(QtCore.QRect(10, 80, 621, 381)) 
     self.listWidget.setObjectName("listWidget") 
     self.listWidget_2 = QtWidgets.QListWidget(self.centralwidget) 
     self.listWidget_2.setGeometry(QtCore.QRect(10, 540, 421, 291)) 
     self.listWidget_2.setObjectName("listWidget_2") 
     self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget) 
     self.comboBox_2.setGeometry(QtCore.QRect(10, 50, 171, 22)) 
     self.comboBox_2.setObjectName("comboBox_2") 
     self.toolButton = QtWidgets.QToolButton(self.centralwidget) 
     self.toolButton.setGeometry(QtCore.QRect(190, 50, 21, 21)) 
     self.toolButton.setObjectName("toolButton") 
     self.toolButton_2 = QtWidgets.QToolButton(self.centralwidget) 
     self.toolButton_2.setGeometry(QtCore.QRect(590, 610, 21, 21)) 
     self.toolButton_2.setObjectName("toolButton_2") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtWidgets.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 642, 21)) 
     self.menubar.setObjectName("menubar") 
     self.menuConfiguracion = QtWidgets.QMenu(self.menubar) 
     self.menuConfiguracion.setObjectName("menuConfiguracion") 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtWidgets.QStatusBar(MainWindow) 
     self.statusbar.setObjectName("statusbar") 
     MainWindow.setStatusBar(self.statusbar) 
     self.actionCorreo = QtWidgets.QAction(MainWindow) 
     self.actionCorreo.setObjectName("actionCorreo") 
     self.actionPesta_as = QtWidgets.QAction(MainWindow) 
     self.actionPesta_as.setObjectName("actionPesta_as") 
     self.menubar.addAction(self.menuConfiguracion.menuAction()) 
     self.label.setBuddy(self.lineEdit) 
     self.label_3.setBuddy(self.comboBox) 

     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
     self.label.setText(_translate("MainWindow", "Articulo")) 
     self.label_2.setText(_translate("MainWindow", "Pedido:")) 
     self.botonEnviar.setText(_translate("MainWindow", "Enviar")) 
     self.botonDel.setText(_translate("MainWindow", "B")) 
     self.label_3.setText(_translate("MainWindow", "Destino:")) 
     self.botonAdd.setText(_translate("MainWindow", "Agregar")) 
     self.label_4.setText(_translate("MainWindow", "Nahuel Varela Blanco")) 
     self.BotonAdj.setText(_translate("MainWindow", "Adjuntar")) 
     self.botonAdjT.setText(_translate("MainWindow", "Adjuntar Todo")) 
     self.BotonQuit.setText(_translate("MainWindow", "Quitar")) 
     self.toolButton.setText(_translate("MainWindow", "...")) 
     self.toolButton_2.setText(_translate("MainWindow", "...")) 
     self.menuConfiguracion.setTitle(_translate("MainWindow", "Configuracion")) 
     self.actionCorreo.setText(_translate("MainWindow", "Correo")) 
     self.actionPesta_as.setText(_translate("MainWindow", "Listas")) 


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_()) 

있는 팝업 대화 상자의 코드 :

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(356, 277) 
     self.listWidget = QtWidgets.QListWidget(Dialog) 
     self.listWidget.setGeometry(QtCore.QRect(40, 10, 256, 192)) 
     self.listWidget.setObjectName("listWidget") 
     self.botonAceptar = QtWidgets.QPushButton(Dialog) 
     self.botonAceptar.setGeometry(QtCore.QRect(270, 250, 75, 23)) 
     self.botonAceptar.setObjectName("botonAceptar") 
     self.botonAgr = QtWidgets.QPushButton(Dialog) 
     self.botonAgr.setGeometry(QtCore.QRect(40, 210, 75, 23)) 
     self.botonAgr.setObjectName("botonAgr") 
     self.lineEdit = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit.setGeometry(QtCore.QRect(120, 210, 113, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.botonBor = QtWidgets.QPushButton(Dialog) 
     self.botonBor.setGeometry(QtCore.QRect(40, 240, 75, 23)) 
     self.botonBor.setObjectName("botonBor") 

     self.retranslateUi(Dialog) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     _translate = QtCore.QCoreApplication.translate 
     Dialog.setWindowTitle(_translate("Dialog", "Dialog")) 
     self.botonAceptar.setText(_translate("Dialog", "Aceptar")) 
     self.botonAgr.setText(_translate("Dialog", "Agregar")) 
     self.botonBor.setText(_translate("Dialog", "Borrar")) 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    Dialog = QtWidgets.QDialog() 
    ui = Ui_Dialog() 
    ui.setupUi(Dialog) 
    Dialog.show() 
    sys.exit(app.exec_()) 
+0

변경'데프 AgregarItems을() :''데프 AgregarItems (자기)에' – eyllanesc

+0

그것이 SO에서 수정되지 않은 작동하지 않는 것을 말하는. 위의 내용이 여러 가지 의미로 해석 될 수 있기 때문에 설명에 필요합니다. : P – eyllanesc

+0

예! 나는 그것을 고칠 것이다! –

답변

0

문제는 다른 클래스의 객체를 생성한다는 것입니다. Qt Designer는 위젯을 채우는 클래스만을 제공하므로 위젯이 아니므로 적절한 위젯을 상속받은 클래스를 생성하여 디자인을 사용하는 것이 일반적입니다. 클래스는 다음 구조를가집니다.

class Your_Widget(Widget_Class, Design_Class): 
    def __init__(self,*args, **kwargs): 
     Widget_Class.__init__(self, *args, **kwargs) 
     self.setupUi(self) 

그런 다음 우리는 다음과 같은 방법을 사용

#I define a PopUp Dialog 
class PopUp(QDialog, Ui_Dialog): 
    def __init__(self,*args, **kwargs): 
     QDialog.__init__(self, *args, **kwargs) 
     self.setupUi(self) 
     self.botonAceptar.clicked.connect(self.AgregarItems) 

    #It should add the string "Prueba" as an Item to the list. 
    def AgregarItems(self): 
     self.listWidget.addItem("Prueba") 


#This is the Main Class  
class ProgramaPedido(QMainWindow, Ui_MainWindow): 
    def __init__(self,*args, **kwargs): 
     QMainWindow.__init__(self, *args, **kwargs) 
     self.setupUi(self) 

     self.Dialog = PopUp() 
     self.toolButton.clicked.connect(self.open_dialog) 

    #I call the PopUp 
    def open_dialog(self): 
     self.Dialog.exec_() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    prog = ProgramaPedido() 
    prog.show() 
    sys.exit(app.exec_()) 
+0

예! 작동했습니다! : D : D 와우, 내 코드가 그렇게 나쁘다고 믿을 수 없어! –