python - 如何制作没有标题栏的选项卡窗格?
问题描述
我想用 PyQt5 制作如下所示的 GUI,但我找不到可以帮助我的示例。我搜索了“更改 qwidget 上的布局”和“没有标题栏的选项卡窗格”和“卡片布局”,但没有运气。我怎样才能用 PyQt5 做到这一点?
解决方案
您必须使用 a QStackedLayout
(或 a QStackedWidget
)在按下按钮时更改页面。第一页应该有按钮。我还实现了back()
返回初始页面的方法,当按下更改按钮时必须调用该插槽:
from functools import partial
from PyQt5 import QtCore, QtWidgets
class CardWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(CardWidget, self).__init__(parent)
self._layout = QtWidgets.QStackedLayout(self)
button_widget = QtWidgets.QWidget()
self.btn_lay = QtWidgets.QFormLayout(button_widget)
self._layout.addWidget(button_widget)
def add_widget(self, text, widget):
self._layout.addWidget(widget)
btn = QtWidgets.QPushButton(text)
self.btn_lay.addRow(btn)
btn.clicked.connect(partial(self._layout.setCurrentWidget, widget))
@QtCore.pyqtSlot()
def back(self):
self._layout.setCurrentIndex(0)
class Widget(QtWidgets.QWidget):
backSignal = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.le1 = QtWidgets.QLineEdit()
self.le2 = QtWidgets.QLineEdit()
button = QtWidgets.QPushButton("Change")
button.clicked.connect(self.backSignal)
flay = QtWidgets.QFormLayout()
flay.addRow("Value 1:", self.le1)
flay.addRow("Value 2:", self.le2)
lay = QtWidgets.QVBoxLayout(self)
lay.addLayout(flay)
lay.addWidget(button)
def create_label():
label = QtWidgets.QLabel(
"Some Other Components",
alignment=QtCore.Qt.AlignCenter
)
label.setStyleSheet("background-color:blue;")
return label
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
c = CardWidget()
for i in range(3):
w = Widget()
w.backSignal.connect(c.back)
c.add_widget("Want to Change value {}".format(i+1), w)
p = QtWidgets.QWidget()
lay = QtWidgets.QGridLayout(p)
lay.addWidget(create_label(), 0, 0, 1, 2)
lay.addWidget(c, 1, 0)
lay.addWidget(create_label(), 1, 1)
lay.setColumnStretch(0, 1)
lay.setColumnStretch(1, 1)
lay.setRowStretch(0, 1)
lay.setRowStretch(1, 1)
p.resize(640, 480)
p.show()
sys.exit(app.exec_())
推荐阅读
- python - 为什么 vue-resource 不在 XHR 中发送 cookie,所以会话不起作用?
- typescript - TypeScript中抽象类的抽象构造函数
- python - 使用 sqlalchemy 加入两个不同的数据库
- r - 如何设置 system() 使用的 shell 来调用 R 中的 bash 脚本?
- jquery - 将多个 $(document).ready() 封装到一个作用域中
- php - 使用 selenium2 驱动程序运行 behat 测试
- numpy - Numpy:分配期间的临时副本
- python-3.x - 存在带有 Pyinstaller (--onefile) 的捆绑二进制文件,但在运行时仍未找到?
- selenium-webdriver - 如何使用 testng 侦听器在每个验证器/断言通过和失败时触发屏幕截图
- python - 用 Python 爬目录树