我试图使用pyqt在QMainWindow上的按钮被单击时显示自定义QDialog窗口。我一直得到以下错误:
$ python main.py
DEBUG: Launch edit window
Traceback (most recent call last):
File "/home/james/Dropbox/Database/qt/ui_med.py", line 23, in launchEditWindow
dialog = Ui_Dialog(c)
File "/home/james/Dropbox/Database/qt/ui_edit.py", line 15, in __init__
QtGui.QDialog.__init__(self)
TypeError: descriptor '__init__' requires a 'sip.simplewrapper' object but received a 'Ui_Dialog'
我已经浏览了几篇在线教程,但大多数都没有展示如何使用非内置对话框窗口。我使用pyuic4生成了主窗口和对话框的代码。我认为应该是相关的代码如下。我错过了什么?
class Ui_Dialog(object):
def __init__(self, dbConnection):
QtGui.QDialog.__init__(self)
global c
c = dbConnection
class Ui_MainWindow(object):
def __init__(self, dbConnection):
global c
c = dbConnection
def launchEditWindow(self):
print "DEBUG: Launch edit window"
dialog = QtGui.QDialog()
dialogui = Ui_Dialog(c)
dialogui = setupUi(dialog)
dialogui.show()
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
conn = sqlite3.connect('meds.sqlite')
c = conn.cursor()
self.ui = Ui_MainWindow(c)
self.ui.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
program = StartQT4()
program.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
额外的问题:由于pyqt函数回调中似乎不能传递参数,设置一些本来作为参数传递的参数(名称不正确的“c”)是全局的,这是将信息传递到这些函数中的最佳方式吗?
Ui_对话框应该是QtGui.QDialog固有的,而不是object。
为什么
QtGui.QWidget.__init___
??? 使用仪器:您必须从基类调用
__init__
methon(括号中的名称“()”)QDialog有两个有用的路由:
首先等待关闭对话框,然后可以访问任何字段窗体对话框。第二个显示对话框,但不要等待,因此要正常工作,必须设置一些插槽/信号连接以响应对话框操作。
例如,对于exec_u():
小贴士:你能把你的ui类变成小部件吗(有布局)。也许问题是你的
__init__
应该是__init__(self, parent=None, dbConnection)
因为当您在现有窗口小部件中创建新窗口小部件时,PyQt可能会尝试将其设置为现有窗口小部件的子窗口小部件。(因此,将所有init更改为具有附加父参数(必须位于第二个位置)。
我以前也这样做过,我可以说是有效的。 假设你的按钮叫“按钮”
这对我的申请有效,我相信它也会对你的申请有效。希望它会有帮助,它应该是相当直接的做一些必要的改变,以适用于您的情况。 祝大家愉快。
相关问题 更多 >
编程相关推荐