使用PyQT 5,其他GUI的方法不起作用

时间:2018-10-31 05:48:02

标签: python python-3.x pyqt pyqt5

我在menu_utama_ui.py中有UI的menu_utama.py(来自qt设计器的转换结果),在rekam_mhs_ui.py中有UI的rekam_mhs.py。

menu_utama.py的源代码

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from menu_utama_ui import  Ui_Form
from rekam_mhs import rekam_mhs_form

class Main_Program(Ui_Form):
    def __init__(self,dialog):
        rekam_mhs_form.__init__(self)
        self.setupUi(dialog)

        #Connect "add" button with a custom function
        self.btnMhs.clicked.connect(self.fungsiMahasiswa)

    def fungsiMahasiswa(self):
        dialog = QtWidgets.QDialog()
        dialog.ui = rekam_mhs_form() #call rekam_mhs.py
        dialog.ui.setupUi(dialog)
        dialog.exec_()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    dialog = QtWidgets.QDialog()

    prog = Main_Program(dialog)

    dialog.show()
    sys.exit(app.exec_())

rekam_mhs.py中有一些源代码

import sys
import database as db

from PyQt5 import QtCore, QtGui, QtWidgets, uic
from rekam_mhs_ui import  rekam_mhs_form
from model import mahasiswa

class rekam_mhs_main(rekam_mhs_form):

    def __init__(self,dialog):
        rekam_mhs_form.__init__(self)
        self.setupUi(dialog)
        self.btnGetData.clicked.connect(self.fungsiPushButton)  #problem

        #Connect "add" button with a custom function

    def fungsiGetData(self): 
        #To call some data from database
        txt = self.lineEdit.text()
        res = db.Database().select_NIM(txt)
        self.lineEdit_2.setText(""+res.nama)
        self.lineEdit_4.setText(""+res.kelas)
        self.lineEdit_3.setText(""+res.prodi)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    dialog = QtWidgets.QDialog()
    prog = rekam_mhs_main(dialog)
    dialog.show()
    sys.exit(app.exec_())

当我运行“ python3 rekam_mhs.py”并单击按钮(btnGetData)时,该方法称为(fungsiGetData)并执行。

当我运行“ python3 menu_utama.py”并单击按钮(btnMhs)来调用rekam_mhs.py时,将显示GUI,但是当我单击btnGetData时,将不执行方法(fungsiGetData)。这种情况有点像单击该按钮时没有方法。

我想念什么?这样调用另一个GUI是否出错?我已经搜索了一些教程,但使用的是qt4而不是qt5。

1 个答案:

答案 0 :(得分:0)

使用您提供的代码,我很确定问题出在fungsimahasiswa()函数中。您将两次调用setupUi()函数(在rekam_mhs_main构造函数中,然后在fungsimahasiswa()内部)。

您要在构造函数中定义信号插槽self.btnGetData.clicked.connect(self.fungsiPushButton),但立即在setupUi()中调用fungsimahasiswa()。这将导致创建新的self.btnGetData。这样该新按钮将没有信号槽。

这就是为什么我认为fungsimahasiswa()应该是:

def fungsiMahasiswa(self):
    dialog = QtWidgets.QDialog()
    dialog.ui = rekam_mhs_form(dialog)
    dialog.exec_()