【问题标题】:Pyqt5 widget in grid expansion网格扩展中的 Pyqt5 小部件
【发布时间】:2019-12-20 18:11:47
【问题描述】:

我有一个qgridlayout,它在特定位置有多个自定义小部件,如下面的示例。举个简单的例子,我使用qlabels,但这将显示我想要完成的工作。

当用户单击顶部的按钮时,我希望带有“第 0 行,第 0 列”字样的标签展开并取代其下方的标签(“第 1 行,第 0 列”)。也不要删除下面的标签,而只是隐藏它。最终结果应该是这样的

我一直在玩setRowStretchsetColumnStretch,但似乎没有任何改变。这是我迷路的地方,不知道我需要去哪里或我错过了什么。我为照片中的示例添加了代码。感谢您的宝贵时间,任何帮助将不胜感激。

GUI 代码:example.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(191, 136)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 2)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 2, 1, 1, 1)
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 3, 1, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 1, 1, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Row Cover"))
        self.label_3.setText(_translate("MainWindow", "Row 2, Column 0"))
        self.label_4.setText(_translate("MainWindow", "Row 1, Column 1"))
        self.label_5.setText(_translate("MainWindow", "Row 2, Column 1"))
        self.label_6.setText(_translate("MainWindow", "Row 0, Column 1"))
        self.label.setText(_translate("MainWindow", "Row 0, Column 0"))
        self.label_2.setText(_translate("MainWindow", "Row 1 ,Column 0 "))

主要代码

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from example import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        QWidget.__init__(self, parent)
        self.MainUi = Ui_MainWindow()
        self.MainUi.setupUi(self)
        self.MainUi.pushButton.clicked.connect(self.expand_row)

    def expand_row(self):
        self.MainUi.label_2.hide()
        self.MainUi.gridLayout.setRowStretch(0,1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = MainWindow()
    MainWindow.setWindowTitle('Example')
    MainWindow.show()
    sys.exit(app.exec_())

【问题讨论】:

  • 尼克的回答哪里不足?

标签: python python-3.x pyqt pyqt5 qgridlayout


【解决方案1】:

尝试按几次按钮:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets

#rom example import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(191, 136)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 2)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 2, 1, 1, 1)
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setObjectName("label_5")
        self.gridLayout.addWidget(self.label_5, 3, 1, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 1, 1, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)

        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Row Cover"))
        self.label_3.setText(_translate("MainWindow", "Row 2, Column 0"))
        self.label_4.setText(_translate("MainWindow", "Row 1, Column 1"))
        self.label_5.setText(_translate("MainWindow", "Row 2, Column 1"))
        self.label_6.setText(_translate("MainWindow", "Row 0, Column 1"))
        self.label.setText(_translate("MainWindow", "Row 0, Column 0"))
        self.label_2.setText(_translate("MainWindow", "Row 1 ,Column 0 "))


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        QWidget.__init__(self, parent)
        self.MainUi = Ui_MainWindow()
        self.MainUi.setupUi(self)

        self.MainUi.pushButton.setCheckable(True)                           # +++ True
        self.MainUi.pushButton.clicked.connect(self.expand_row)


    def expand_row(self, state):                                            # +++ state
        if state:
            self.MainUi.label_2.hide()
            self.MainUi.gridLayout.addWidget(self.MainUi.label, 1, 0, 2, 1) #  ...2, 1)
        else:
            self.MainUi.gridLayout.addWidget(self.MainUi.label, 1, 0, 1, 1) #  ...1, 1)
            self.MainUi.label_2.show()            

#        self.MainUi.gridLayout.setRowStretch(0,1)  


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = MainWindow()
    MainWindow.setWindowTitle('Example')
    MainWindow.show()
    sys.exit(app.exec_())

【讨论】:

  • @eyllanesc 抱歉
猜你喜欢
  • 2017-03-22
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多