如何访问Qt Designer创建的控件?PyQt5表格写入错误求助
解决Ui_Form无tableWidget属性的问题
先排查控件名称是否匹配
- 打开转换后的.py文件(比如叫
ui_main.py),搜索tableWidget,确认是否存在这个变量名。如果Qt Designer里把表格的objectName改成了其他名字(比如my_table),那代码里要对应使用这个名字,而不是默认的tableWidget。 - 也可以直接打开.ui文件,在Qt Designer里选中表格,看右侧属性面板的
objectName字段,确保代码里调用的名称和它完全一致。
确保界面加载方式正确
正确的继承加载写法参考示例:
from PyQt5.QtWidgets import QWidget, QApplication, QTableWidgetItem from ui_main import Ui_Form # 替换成你的ui转换后的py文件名 from PyQt5.QtCore import QTimer class MyWindow(QWidget, Ui_Form): def __init__(self): super().__init__() self.setupUi(self) # 必须调用这行,把Ui里的控件实例化到当前窗口对象上 self.timer = QTimer() self.timer.timeout.connect(self.update_table) self.timer.start(1000) # 每秒更新一次表格 def update_table(self): # 这里用self.tableWidget访问表格,而非直接操作Ui_Form类 self.tableWidget.setItem(0, 0, QTableWidgetItem("测试数据")) if __name__ == "__main__": app = QApplication([]) win = MyWindow() win.show() app.exec_()
错误的写法通常是直接操作Ui_Form类的属性,而不是实例化后的窗口对象。setupUi(self)会把Ui里的所有控件作为属性绑定到当前的MyWindow实例上,所以必须通过self.控件名来访问。
额外检查点
- 如果转换后的.py文件里确实没有
tableWidget,说明.ui文件里的表格控件没被正确转换,重新用pyuic5命令转换一次:
确保转换过程没有报错。pyuic5 your_ui_file.ui -o ui_main.py
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

