- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里遇到了一个令人烦恼的顽固问题,如果有人能让我深入了解我做错了什么,我将不胜感激。
我有一个 PyQt 应用程序,应该显示一个数字表。所以,很自然地,我使用 QTableWidget。现在,它非常简单:我所做的就是创建一个带有表格小部件和按钮的窗口并显示它。我还没有填充表格。
我希望表格能够随着窗口自动调整大小,最终我将向此表单添加其他小部件,所以我使用 QGridLayout。当我在 Qt Designer 中预览表单时,它的外观和行为都正确。除了按钮使用的空间外,表格占据了所有表单,当我调整窗口大小时,它们都会随之正确调整大小。但当我尝试运行生成的 Python 代码时,一切都搞砸了。表格小部件和按钮都挤在一起,彼此重叠,位于窗口的左上角。
我使用 Qt Designer 4 创建了 .ui 文件,并使用 pyuic4 生成了 Python 代码。我根本没有手动编辑过这两个文件。所以我认为两者都没有基本的语法错误。我的猜测是我在某种程度上误解了小部件、窗口和布局管理器之间的关系。但我不知道怎么办。
这是我的 .ui 文件的代码:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>TableWindow</class>
<widget class="QWidget" name="TableWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>586</width>
<height>383</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string/>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTableWidget" name="tableWidget"/>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="btnSave">
<property name="text">
<string>Save to File</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
下面是 pyuic4 从 .ui 文件生成的 Python 代码:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file
'ui_table_window.ui'
#
# Created: Mon Apr 19 23:47:43 2010
# by: PyQt4 UI code generator 4.6
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_TableWindow(object):
def setupUi(self, TableWindow):
TableWindow.setObjectName("TableWindow")
TableWindow.resize(586, 383)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(TableWindow.sizePolicy().hasHeightForWidth())
TableWindow.setSizePolicy(sizePolicy)
self.gridLayout = QtGui.QGridLayout(TableWindow)
self.gridLayout.setObjectName("gridLayout")
self.tableWidget = QtGui.QTableWidget(TableWindow)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
self.btnSave = QtGui.QPushButton(TableWindow)
self.btnSave.setObjectName("btnSave")
self.gridLayout.addWidget(self.btnSave, 1, 0, 1, 1)
self.retranslateUi(TableWindow)
QtCore.QMetaObject.connectSlotsByName(TableWindow)
def retranslateUi(self, TableWindow):
self.btnSave.setText(QtGui.QApplication.translate("TableWindow", "Save to File", None, QtGui.QApplication.UnicodeUTF8))
有人能看出我做错了什么吗?
最佳答案
我也想知道这个问题的答案。
“它必须在您的设置中”是零帮助。
解决了!
附录:下面的任务和陈述是合法的。但是,如果您将对话框/UI 创建为对话框和/或小部件,则它们适用。这本身就是问题所在
为了使正确的布局发挥作用并为您提供所需的表单布局,您必须将您的 ui 项目作为“MainWindow”应用程序启动。不是带有按钮的对话框或小部件应用程序。 MainWindow 模板配备了一个“centralWidget”,从而为您提供了布局选项。因此,如果您没有这样做,下面将帮助您改变这一点
看起来 pyuic4 在这一方面确实有所不足。为整体 ui 提供一个包装器以 Hook 到主窗口的一种方法是通过将所有小部件设置为整体布局来最终确定它们。 QGridLayout、QVerticalLayout,无所谓,只是让UI的所有内容都由一个顶层布局来“处理”。不要将布局应用于表单。
注意:您可能想暂时只是为了能够使用 QT Designer 中的“预览”。然而,这就是 py 转换被破坏的地方。在保存/转换之前,您需要破坏/删除表单的布局
保存 .ui 文件并使用 pyuic4 将其转换为 .py 文件后,您将需要添加/更改一两行
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(625, 448)
<create a "holder" central widget>
self.widget = QtGui.QWidget()
<set the overall QLayout with the widget as the>
<parent rather than the "Dialog" that the>
<generated code gives you>
self.gridLayout_2 = QtGui.QGridLayout(self.widget)
self.gridLayout_2.setObjectName("gridLayout_2")
....
....
现在在普通模块中您将调用此 UIobjects.setCentralWidget() 函数来设置该小部件
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyForm()
< set the widget inside the form to it's cetral widget >
myapp.setCentralWidget( myapp.ui.widget )
myapp.show()
sys.argv[1] = myapp.unUNCPath( sys.argv[1] )
os.chdir( sys.argv[1] )
myapp.setRootDir( sys.argv[1] )
myapp.processDirectory()
sys.exit(app.exec_())
关于python - 需要 PyQt 和 QGridLayout 的一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676369/
是否可以在另一个 QGridLayout 中包含 QGridLayouts?我一直在尝试使用 UI 设计器来执行此操作,以便我可以统一调整所有 QGridLayouts 的大小。 这是我为了好玩而创建
我正在尝试使 QGridLayout 可滚动。它可能包含几个自定义小部件,小部件的数量不固定。当有超过 x 个小部件时,QGridLayout 必须是可滚动的,x 是任意数字。 问题是,当我使用 QS
我一直在试图弄清楚小部件的坐标是如何到达的。例如在 qt 文档中,我想知道这是如何完成的。 QGridLayout *layout = new QGridLayout; layout->ad
问题说明了一切。 我有一个 5 x 3 的网格。 看起来像这样 row 0: buttonA--buttonA--buttonA nothing buttonB--buttonB--butt
我有一个 QGridLayout并且需要删除其所有按钮,然后重新创建它们。 我尝试使用 count() 循环布局其次是 takeAt()删除返回的 LayoutItem的小部件。然而,出于某种原因,我
我想用QWidgets填充QGridLayout。 QWidgets 需要以从左上到右上的方式显示,并在每行填充 QWidgets 后继续向下填充。类似且熟悉的 GUI 的一个例子是 Apple 如何
我正在尝试将 Qgridlayout 用于我的 GUI。我希望减小 Qspin 的宽度,如图所示。有什么建议我该怎么做吗?谢谢 layout.addWidget(checkBoxVBG,1,0
我有一个 QTableWidget 和 6 个 QPushBotton 我想以这种方式将它们放在一个布局中 只是按钮之间的小间距 但是使用 QGridLayout 让它看起来像这样 代码: t
我正在使用 QGridLayout 添加一个 QPushButton 和一个 QTextEdit。但每当我隐藏和删除 QTextEdit 小部件 时,QPushButton 就会出现在 QTextEd
我正在使用 Qt5.5 为我的项目构建图形用户界面并尝试使用 QGridLayout。 第一个来源 此代码按我预期的方式工作。 QGridLayout * layout = new QGridLayo
不幸的是,我找到的这个问题的答案对我不起作用。我想我在某个地方犯了错误...... 我想向 QGridLayout 添加内容: int rows = 2; int columns = 2; for(i
我正在尝试创建一个如下所示的布局: _________ | | | |1 | 2 | |__|______| | 3 | 4 | |____|____| 基本上,我希望第一行的
我目前有一个 QGridLayout 的问题。 每个方 block 都是一个小部件,我有一个这样的循环 for(int i = 0; i layout->addWidget(new Square(th
我正在尝试创建一个程序,让用户可以通过三个选项来回答问题。我为此使用了 QGridLayout,但只显示了最后添加到 QGridLayout 的小部件。 预期: ###################
我有一个 QGridLayout 来处理我的小部件。事实上,它们留在我放置的列中,而没有扩展整个宽度。是否有任何选项可以告诉行完全展开?目标是模仿 QHBoxLayout 的行为,但不使用 QHBox
我对 QGridLayout 有疑问。我的布局的一行包含一个通常隐藏的元素 (QProgressbar)。当有一些进展要报告时,我会调用它。问题是,当我在 QProgressbar 上调用 show
我有一个这样设置的对话框: 除标题外,每个组件的属性都设置为默认值。我希望包含 label_3 的行与其他三行的高度相同(为了清楚起见,底部的行将展开以占用剩余空间,如图所示)。问题是复选框与文本框的
我有一个按钮,后面跟着一个充满小部件的 QGridLayout。我想在每次单击按钮时显示/隐藏 QGridLayout,但是阅读 QGridLayout 的文档我发现没有 show()/hide ()
下面是如何绘制一个跨越两列的按钮: #include int main(int argv, char **args) { QApplication app(argv, args);
是否可以通过某种方式设置 QGridLayout 列可以扩展到的最大宽度? 如果我为列内的小部件设置最大宽度,即使达到小部件大小限制,该列也会继续增长。 我是 Qt 的新手,所以也许我遗漏了一些东西.
我是一名优秀的程序员,十分优秀!