PyQt5 是使用 Python 实现的一个 GUI 库,它拥有大量强大的控件,QCommandLinkButton就是其中之一。
QCommandLinkButton是一种命令链接按钮,类似于普通的QPushButton,但它提供的更多说明和可检查状态,这种按钮通常被用于设置向导流程。
要想使QCommandLinkButton可检查,首先需要设置 checkable
属性为 True
。然后,在按钮被选中或取消选中时会出发 toggled
信号,我们可以通过连接这个信号来做进一步操作。
以下是一个简单的示例:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QCommandLinkButton
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
cmdlnkbtn = QCommandLinkButton('Click me', self)
cmdlnkbtn.move(50, 50)
cmdlnkbtn.toggle()
cmdlnkbtn.toggled.connect(lambda: self.checkBtn(cmdlnkbtn))
self.statusBar()
self.setGeometry(300, 300, 250, 180)
self.setWindowTitle('QCommandLinkButton')
self.show()
def checkBtn(self, btn):
if btn.isChecked():
self.statusBar().showMessage('Checked')
else:
self.statusBar().showMessage('Unchecked')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
在这个示例中,我们创建了一个QMainWindow,并在上面添加一个QCommandLinkButton。我们将按钮的 checkable
属性设置为 True
,并且在按钮创建后将其切换为选中状态。然后我们连接了 toggled
信号来调用 checkBtn
方法,此方法检查按钮是否被选中,并在状态栏中显示相应的消息。
另一个示例,我们创建了一个具有四个选择项的向导表单。在每个页面上,用户可以完成相关选项,然后前进或后退到下一页或上一页:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QCommandLinkButton, QVBoxLayout, QWidget, QHBoxLayout, QFrame, QLabel, QRadioButton, QGroupBox, QPushButton, QRadioButton
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('QCommandLinkButton')
self.stackedWidget = QWidget(self)
self.setGeometry(500, 300, 450, 350)
buttons_layout = QHBoxLayout()
self.prev_btn = QCommandLinkButton('< Previous', self)
self.prev_btn.setEnabled(False)
self.prev_btn.clicked.connect(lambda: self.showPrevPage())
self.next_btn = QCommandLinkButton('Next >', self)
self.next_btn.setDefault(True)
self.next_btn.clicked.connect(lambda: self.showNextPage())
buttons_layout.addStretch(1)
buttons_layout.addWidget(self.prev_btn)
buttons_layout.addWidget(self.next_btn)
self.pages = []
self.current_page = -1
# Page 1
page1 = QWidget()
intro_label = QLabel('Please select your preferred language:', page1)
vbox = QVBoxLayout(page1)
vbox.addWidget(intro_label)
vbox.addWidget(QRadioButton('English', page1))
vbox.addWidget(QRadioButton('German', page1))
vbox.addWidget(QRadioButton('Chinese', page1))
vbox.addStretch(1)
self.pages.append(page1)
# Page 2
page2 = QWidget()
intro_label2 = QLabel('Please select your preferred theme:', page2)
vbox = QVBoxLayout(page2)
vbox.addWidget(intro_label2)
group_box = QGroupBox('Selected theme:', page2)
vbox.addWidget(group_box)
inner_box = QHBoxLayout(group_box)
radiobtn1 = QRadioButton('Light theme', group_box)
radiobtn2 = QRadioButton('Dark theme', group_box)
inner_box.addWidget(radiobtn1)
inner_box.addWidget(radiobtn2)
vbox.addStretch(1)
self.pages.append(page2)
# Page 3
page3 = QWidget()
vbox = QVBoxLayout(page3)
intro_label3 = QLabel('Please enter your username:', page3)
vbox.addWidget(intro_label3)
user_input = QFrame(page3)
user_input.setFrameShape(QFrame.StyledPanel)
inner_box = QHBoxLayout(user_input)
inner_box.addWidget(QLabel('Username:'))
inner_box.addWidget(QPushButton('Check availability'))
inner_box.addWidget(QPushButton('Recover username'))
vbox.addWidget(user_input)
vbox.addStretch(1)
self.pages.append(page3)
#Page 4
self.finish_btn = QCommandLinkButton('Finish', self)
self.finish_btn.setEnabled(False)
self.finish_btn.clicked.connect(lambda: self.finishForm())
vbox = QVBoxLayout(self.stackedWidget)
vbox.addWidget(self.pages[0])
vbox.addLayout(buttons_layout)
self.stackedWidget.setLayout(vbox)
self.setCentralWidget(self.stackedWidget)
def showPrevPage(self):
self.current_page -= 1
self.stackedWidget.setCurrentWidget(self.pages[self.current_page])
if self.current_page == 0:
self.prev_btn.setEnabled(False)
if self.current_page < 3:
self.next_btn.setText('Next >')
self.next_btn.setEnabled(True)
def showNextPage(self):
self.current_page += 1
self.stackedWidget.setCurrentWidget(self.pages[self.current_page])
if self.current_page > 0:
self.prev_btn.setEnabled(True)
if self.current_page == 2:
self.next_btn.setText('Finish')
self.finish_btn.setEnabled(True)
if self.current_page == 3:
self.stackedWidget.setCurrentWidget(self.finish_btn)
def finishForm(self):
self.statusBar().showMessage('Form finished')
self.close()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
在这个示例中,我们创建了一个多页向导表单,它有四个页面,其中每个页面作为一个单独的 QWidget,分别进行不同的设置。在每个页面中,我们使用 QRadioButton 和 QGroupBox 控件。设置 QCommandLinkButton 作为向导页面之间的前进和后退按钮,根据页面数量灵活的变化。随着向导的进行,我们还可以根据当前页面的不同,设置状态显示的不同内容。
总之,PyQt5 的 QCommandLinkButton 功能非常强大,可以帮助我们创建更加完善的GUI应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QCommandLinkButton – 使其可检查 - Python技术站