2017-10-03 5 views
1

私はPyQt5で私のgui appliacationをプログラミングする際に問題に直面しました。私は "addclientbutton"をクリックして2番目の(ダイアログ)ウィンドウを開こうとしています。しかし代わりに、単にメインウィンドウを閉じます。ここで私はそれを作成した:PyQt5。ダイアログウィンドウが表示されません。代わりにメインウィンドウを閉じます

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(281, 176) 
     self.comboBox = QtWidgets.QComboBox(Dialog) 
     self.comboBox.setGeometry(QtCore.QRect(90, 10, 71, 22)) 
     self.comboBox.setObjectName("comboBox") 
     self.comboBox.addItem("") 
     self.comboBox_2 = QtWidgets.QComboBox(Dialog) 
     self.comboBox_2.setGeometry(QtCore.QRect(10, 10, 71, 22)) 
     self.comboBox_2.setObjectName("comboBox_2") 
     self.comboBox_2.addItem("") 
     self.dateTimeEdit = QtWidgets.QDateTimeEdit(Dialog) 
     self.dateTimeEdit.setGeometry(QtCore.QRect(10, 60, 194, 22)) 
     self.dateTimeEdit.setObjectName("dateTimeEdit") 
     self.label_2 = QtWidgets.QLabel(Dialog) 
     self.label_2.setGeometry(QtCore.QRect(10, 40, 91, 16)) 
     self.label_2.setObjectName("label_2") 
     self.lineEdit = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit.setGeometry(QtCore.QRect(150, 110, 113, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.label_3 = QtWidgets.QLabel(Dialog) 
     self.label_3.setGeometry(QtCore.QRect(150, 90, 121, 16)) 
     self.label_3.setObjectName("label_3") 
     self.lineEdit_2 = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit_2.setGeometry(QtCore.QRect(10, 110, 113, 20)) 
     self.lineEdit_2.setObjectName("lineEdit_2") 
     self.label_4 = QtWidgets.QLabel(Dialog) 
     self.label_4.setGeometry(QtCore.QRect(10, 90, 111, 16)) 
     self.label_4.setObjectName("label_4") 
     self.pushButton = QtWidgets.QPushButton(Dialog) 
     self.pushButton.setGeometry(QtCore.QRect(150, 140, 111, 23)) 
     self.pushButton.setObjectName("pushButton") 
     self.pushButton_2 = QtWidgets.QPushButton(Dialog) 
     self.pushButton_2.setGeometry(QtCore.QRect(10, 140, 111, 23)) 
     self.pushButton_2.setObjectName("pushButton_2") 

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

ここで私は、ボタン自体を作成しました:

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(803, 803) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget) 
     self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 331, 191)) 
     self.calendarWidget.setObjectName("calendarWidget") 
     self.addclient = QtWidgets.QPushButton(self.centralwidget) 
     self.addclient.setGeometry(QtCore.QRect(0, 350, 331, 81)) 
     font = QtGui.QFont() 
     font.setFamily("Verdana") 
     font.setPointSize(10) 
     self.addclient.setFont(font) 
     self.addclient.setObjectName("addclient") 

その後、私は、この関数を書いた:

import sys 
from interface import * 
from dialog import * 
from PyQt5 import QtCore, QtGui, QtWidgets 

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

     self.ui.addclient.clicked.connect(self.addclientfunction) 

    def addclientfunction(self): 
     self.Ui_Dialog.Dialog.show() 

if __name__=="__main__": 
    app = QtWidgets.QApplication(sys.argv) 
    myapp = MyWin() 
    myapp.show() 
    sys.exit(app.exec_()) 

だから、ここにある - このPyQtはデザイナーのため申し訳ありません迷惑行:D

答えて

1

メインウィンドウの場合と同じ方法でダイアログクラスを作成する必要があります。したがって、このような作業をする必要があります:

class MyDialog(QtWidgets.QDialog): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

class MyWin(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyWin, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.addclient.clicked.connect(self.addclientfunction) 

    def addclientfunction(self): 
     self.dialog = MyDialog() 
     self.dialog.show() 

をしかし、あなたの質問に示すUi_DialogUi_MainWindowクラスが不完全であることに注意してください。私の答えはあなたの完全なUIクラスが期待どおりに動作することを前提としています。

関連する問題