【问题标题】:PyQt5: Progamically adding QWidget to layout, doesn't show Qwidget when a spacer is addedPyQt5:以编程方式将 QWidget 添加到布局,添加间隔时不显示 Qwidget
【发布时间】:2016-09-02 10:04:10
【问题描述】:

编辑:我尝试了更多的东西。如果我将垫片移动到我要添加的垫片下方的布局,则不会表现出相同的确切行为。它仍然不是最佳的,并且不会起作用,因为我的最终目标是有一个带有间隔的滚动区域,我将我的小部件添加到其中,但这看起来不正确。我认为问题在于小部件的尺寸为零,我只是不知道为什么或如何解决它。

我有两个用 QtDesigner 制作的 ui 文件。第一个文件是我在程序开始时的主窗口,我加载第二个 ui 文件并将其放入第一个中间的垂直分隔符中。每次单击按钮时都会放置额外的副本。

这一切都很好,直到我添加一个垂直垫片将项目推到顶部。我已经厌倦了从 Designer 和代码中添加它。两者的结果相同。

我在google上看了很多,也尝试了很多建议。

我尝试将第二个 ui 文件的父级设置为我添加的第一个包含垂直布局的 Qwidget。

我尝试为各种事物设置最小尺寸和尺寸策略。

以下是我当前的代码,任何想法或建议将不胜感激!

#!python3
import sys
from PyQt5 import QtWidgets, QtCore, uic

class TimesheetWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(TimesheetWidget, self).__init__(parent)
        self.parent = parent
        self.tableRows = dict()

    def setup(self):
        self.labelSaved.hide()
        self.addTableRow()

    def addTableRow(self):
        thisRow = len(self.tableRows)
        self.tableRows[thisRow] = uic.loadUi("gui/tableRow.ui")
        self.tableRows[thisRow].addButton.clicked.connect(self.addTableRow)
        self.spacer.addWidget(self.tableRows[thisRow])

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    timesheet = TimesheetWidget()
    Mytimesheet = uic.loadUi("gui/timesheet.ui", baseinstance=timesheet)
    Mytimesheet.setup()
    Mytimesheet.show()

    sys.exit(app.exec_())

这里是 ui 文件的链接(它们很长才能发布): gist link for ui files

【问题讨论】:

    标签: python pyqt5


    【解决方案1】:

    我最终解决了这个问题,反复尝试随机的事情,直到某些事情奏效。

    事实证明,在我的第二个 ui 文件中,我没有顶级布局。 (我不确定是不是它的名字。)

    为了解决这个问题,我右键单击顶层小部件并选择布局并选择水平布局,尽管我认为任何一个都可以。

    这是一张显示顶级小部件的图片,上面带有取消符号。一旦我添加了消失的布局,一切正常!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2014-11-29
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      相关资源
      最近更新 更多