我在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。
答案 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_()