我在QtDesigner中构建一个Gui,但我不明白我是如何添加“动态属性”的: 我尝试添加一个QTable Widget,但列的标题是大的(文本只是列中的2个字母)。 由于我的Gui中的空间原因,我只需要它们与文本一样大(或者让我们说4个字母)
我找到了 QHeaderView :: ResizeToContents方法,但我不知道如何使用它 - 有没有办法在QtDesigner中执行此操作?我是新手,我不知道如何更改Gui背后的代码......
答案 0 :(得分:1)
对于PyQt,Qt Designer的主要目的是创建应用程序的主GUI结构。它只允许为任何给定的窗口小部件修改可用属性的子集,并且它不能用于编写应用程序的主逻辑。
相反,我们的想法是从Qt Designer创建的ui文件生成一个python模块,然后将其导入到您的应用程序中,您可以在其中执行剩余的设置代码,连接信号,编写所有事件处理程序等。 / p>
假设您已使用Qt Designer创建了ui
文件,并将其命名为mainwindow.ui
。
然后你会生成如下的python模块:
pyuic4 -o mainwindow_ui.py mainwindow.ui
接下来,您将编写一个单独的main.py
脚本,该脚本从生成的模块中导入GUI类,并根据需要创建它们的实例。
所以你的main.py
看起来像这样:
from PyQt4 import QtCore, QtGui
from mainwindow_ui import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
header = self.tableWidget.horizontalHeader()
header.setResizeMode(QtGui.QHeaderView.ResizeToContents)
...
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
此处的基类必须与Qt Designer中的顶级窗口小部件相同(即通常是QMainWindow,QDialog或QWidget)。此外,顶级窗口小部件的objectName
属性用于生成导入的GUI类的类名(前缀为“Ui_”)。上面的例子假设这被设置为“MainWindow”。
所有其他小部件的objectName
属性将成为MainWindow
类的属性,以便可以在其余代码中轻松访问它们。因此,始终将objectName
属性设置为描述性名称(即不是“pushButton_1”,“pushButton_2”等)非常重要。