【发布时间】:2025-12-22 11:25:13
【问题描述】:
我正在尝试使用 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_MainWindow.__init__有一个参数:dbConnection你似乎没有通过:self.ui = Ui_MainWindow()- 你的代码怎么能工作? -
哎呀。我暂时删除了中间问题中的数据库内容,以查看它是否是问题的一部分。然后我忘记重新复制并重新粘贴代码后重新粘贴。