我想知道如何在 pyqt 中创建自定义小部件。我见过许多不同的 C++ 示例,以及一些 pyqt 的非描述性示例,但没有任何内容真正解释如何执行和实现它。特别是没有任何示例基本上不仅仅是修改后的 qt-designer 输出,而且我正在从头开始编写代码,因此这不是很有帮助。
到目前为止,我能找到的最好的例子是基本上只是有人修改 qt-designer 代码并且没有真正解释它在做什么。
有人可以向我展示如何创建自定义小部件的示例吗?
Edit:我正在尝试创建一个嵌入的小部件QStackedWidget
和底部的按钮可循环页面。
我还计划为每个页面都有一个单独的小部件,但考虑到我实际上无法完成第一步,我想当我到达它时我会跨过那座桥。
下面展示了如何实现QStackedWidget
有 2 个按钮,基本思想是布局设计,为此我们分析QVBoxLayout
必须放置放置QStackedWidget
和另一个布局,第二个布局将是QHBoxLayout
有按钮。然后我们连接处理页面之间转换的信号。另外,在此示例中,我创建了 3 种类型的小部件,它们将放置在每个页面上。
from PyQt5.QtWidgets import *
class Widget1(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
for i in range(4):
lay.addWidget(QPushButton("{}".format(i)))
class Widget2(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
for i in range(4):
lay.addWidget(QLineEdit("{}".format(i)))
class Widget3(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
for i in range(4):
lay.addWidget(QRadioButton("{}".format(i)))
class stackedExample(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
self.Stack = QStackedWidget()
self.Stack.addWidget(Widget1())
self.Stack.addWidget(Widget2())
self.Stack.addWidget(Widget3())
btnNext = QPushButton("Next")
btnNext.clicked.connect(self.onNext)
btnPrevious = QPushButton("Previous")
btnPrevious.clicked.connect(self.onPrevious)
btnLayout = QHBoxLayout()
btnLayout.addWidget(btnPrevious)
btnLayout.addWidget(btnNext)
lay.addWidget(self.Stack)
lay.addLayout(btnLayout)
def onNext(self):
self.Stack.setCurrentIndex((self.Stack.currentIndex()+1) % 3)
def onPrevious(self):
self.Stack.setCurrentIndex((self.Stack.currentIndex()-1) % 3)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = stackedExample()
w.show()
sys.exit(app.exec_())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)