Python 网格扩展中的Pyqt5小部件
我有一个Python 网格扩展中的Pyqt5小部件,python,python-3.x,pyqt,pyqt5,qgridlayout,Python,Python 3.x,Pyqt,Pyqt5,Qgridlayout,我有一个qgridlayout,在下面这个例子中的特定位置有多个自定义小部件。举个简单的例子,我使用的是qlabels,但这将显示我试图实现的目标 当用户单击顶部的按钮时,我希望带有“Row 0,Column 0”字样的标签展开并取代其下方的标签(“Row 1,Column 0”)。也不要移除下面的标签,只需将其隐藏。最终结果应该是这样的 我一直在玩setRowStretch和setColumnStretch,但似乎没有什么变化。这是我迷失的地方,我不知道我需要去哪里,也不知道我错过了什么。
qgridlayout
,在下面这个例子中的特定位置有多个自定义小部件。举个简单的例子,我使用的是qlabels
,但这将显示我试图实现的目标
当用户单击顶部的按钮时,我希望带有“Row 0,Column 0”字样的标签展开并取代其下方的标签(“Row 1,Column 0”)。也不要移除下面的标签,只需将其隐藏。最终结果应该是这样的
我一直在玩setRowStretch
和setColumnStretch
,但似乎没有什么变化。这是我迷失的地方,我不知道我需要去哪里,也不知道我错过了什么。我在照片中添加了示例代码。感谢您抽出时间,我们将非常感谢您的帮助
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_())
试着按下按钮几次:
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 Sorry Nick的回答哪里不够?