1

我在 Qt Designer 中设计 GUI,然后使用 loadUiType 方法在 Puthon3 脚本中加载 UI 文件:

class Main(QMainWindow, uic.loadUiType("adc_main_form.ui")[0]):
def __init__(self):
    super(Main, self).__init__()
    self.setupUi(self)

一切正常。然后我对我的表单设计进行了一点革命,其中包括很多重命名。因此,我使用 Qt Designer 的 UI 文件(XML 文件)并在文本编辑器中对其进行编辑。也许我犯了一些拼写错误。现在我在 Python 脚本启动期间收到一条消息,位于 self.setupUi(self) 行:

文件“字符串”,第 671 行,在 setupUi

TypeError:参数 1 具有意外类型“QRadioButton”

因此,在导入 XML 文件的过程中出现了一些问题。但是错误类型告诉我不足以找到错误。

我仔细检查了我所有的 QRadioButton 小部件。不知道。

我用设计器打开 Ui - 它打开时没有错误消息。

我将 UI 转换为 PY (pyiuc5) - 没有错误。

.ui文件在这里

在 setupUI 这样的封闭进程中找到错误的方法是什么?

4

3 回答 3

2

在这个 .ui 文件中,小部件与主窗口的插槽具有相同的名称。由于我们对主窗口进行子类化,小部件和插槽都在同一个命名空间中,因此self.zero_fix = QtWidgets.QRadioButton(self.frame_4)编译的 .ui 文件中的命令覆盖插槽zero_fix()

于 2016-02-05T22:24:09.230 回答
1

要回答有关如何调试由以下内容加载的文件的具体问题uic

当您使用类似的方法时loadUiType,它会创建通常由pyuic. 但不是将此模块写入磁盘,而是对其进行调用exec,这样代码将动态执行,并且class可以直接返回生成的对象。

但是,生成的代码并不完全相同。使用时pyuic,一些注释行被添加到文件的顶部,这些需要被删除,以便追溯信息正确排列。更具体地说,需要将多余的行替换为单个空行,以便模块顶部如下所示:

     
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

完成后,原始回溯现在将第 671 行作为这一行:

    self.zero_fix.clicked.connect(MainWindow.zero_fix)

TypeError现在是有道理的,因为self.zero_fix(一个单选按钮)现在正在遮蔽MainWindow.zero_fix(一个插槽),由于一些错误的重命名。

于 2016-02-06T19:02:16.453 回答
1

查看第 671 行由 生成的输出pyuic5。它应该在setupUi方法内部。这就是错误所指的。uic.loadUiType正在即时生成 Python 文件。然后您尝试执行它,但它在运行时失败。

Nitpick:尝试从 .ui 文件中删除所有连接。它们不属于那里并且使代码更难维护,除非连接在同一文件中的小部件之间。只需MainWindow按以下格式命名插槽:on_WIDGET_SIGNAL,其中 WIDGET 是小部件的名称,SIGNAL 是信号的名称,例如on_setADC1_clicked.

于 2016-02-05T19:31:23.903 回答