pyqt5教程9:Widgets组件
生活随笔
收集整理的這篇文章主要介紹了
pyqt5教程9:Widgets组件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PyQt5 widgets
小部件是應用程序的基本構建塊。 PyQt5 有各種各樣的小部件,包括按鈕、復選框、滑塊或列表框。在本教程的這一部分,我們將描述幾個有用的小部件:QCheckBox、切換模式下的 QPushButton、QSlider、QProgressBar 和 QCalendarWidget。
PyQt5 QCheckBox
QCheckBox 是一個有兩種狀態的小部件:開和關。它是一個帶有標簽的盒子。復選框通常用于表示應用程序中可以啟用或禁用的功能。
check_box.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialIn this example, a QCheckBox widget is used to toggle the title of a window.Author: Jan Bodnar Website: zetcode.com """from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication from PyQt5.QtCore import Qt import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):cb = QCheckBox('Show title', self)cb.move(20, 20)cb.toggle()cb.stateChanged.connect(self.changeTitle)self.setGeometry(300, 300, 350, 250)self.setWindowTitle('QCheckBox')self.show()def changeTitle(self, state):if state == Qt.Checked:self.setWindowTitle('QCheckBox')else:self.setWindowTitle(' ')def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main()在我們的示例中,我們將創建一個復選框,用于切換窗口標題。
cb = QCheckBox('Show title', self)這是一個 QCheckBox 構造函數。
cb.toggle()我們已經設置了窗口標題,所以我們也選中了復選框。
cb.stateChanged.connect(self.changeTitle) 我們將用戶定義的 changeTitle 方法連接到 stateChanged 信號。 changeTitle 方法將切換窗口標題。 def changeTitle(self, state):if state == Qt.Checked:self.setWindowTitle('QCheckBox')else:self.setWindowTitle(' ') 小部件的狀態被賦予 state 變量中的 changeTitle 方法。如果小部件被選中,我們設置窗口的標題。否則,我們為標題欄設置一個空字符串。Figure: QCheckBox
Toggle button
切換按鈕是特殊模式下的 QPushButton。它是一個有兩種狀態的按鈕:按下和未按下。我們通過單擊在這兩種狀態之間切換。toggle_button.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialIn this example, we create three toggle buttons. They will control the background color of a QFrame.Author: Jan Bodnar Website: zetcode.com """from PyQt5.QtWidgets import (QWidget, QPushButton,QFrame, QApplication) from PyQt5.QtGui import QColor import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.col = QColor(0, 0, 0)redb = QPushButton('Red', self)redb.setCheckable(True)redb.move(10, 10)redb.clicked[bool].connect(self.setColor)greenb = QPushButton('Green', self)greenb.setCheckable(True)greenb.move(10, 60)greenb.clicked[bool].connect(self.setColor)blueb = QPushButton('Blue', self)blueb.setCheckable(True)blueb.move(10, 110)blueb.clicked[bool].connect(self.setColor)self.square = QFrame(self)self.square.setGeometry(150, 20, 100, 100)self.square.setStyleSheet("QWidget { background-color: %s }" %self.col.name())self.setGeometry(300, 300, 300, 250)self.setWindowTitle('Toggle button')self.show()def setColor(self, pressed):source = self.sender()if pressed:val = 255else:val = 0if source.text() == "Red":self.col.setRed(val)elif source.text() == "Green":self.col.setGreen(val)else:self.col.setBlue(val)self.square.setStyleSheet("QFrame { background-color: %s }" %self.col.name())def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main()在我們的示例中,我們創建了三個切換按鈕和一個 QWidget。我們將 QWidget 的背景顏色設置為黑色。切換按鈕將切換顏色值的紅色、綠色和藍色部分。背景顏色取決于按下的切換按鈕。
self.col = QColor(0, 0, 0) 這是初始的黑色值。 redb = QPushButton('Red', self) redb.setCheckable(True) redb.move(10, 10) 要創建一個切換按鈕,我們創建一個 QPushButton 并通過調用 setCheckable 方法使其可檢查。 redb.clicked[bool].connect(self.setColor) 我們將點擊信號連接到用戶定義的方法。我們使用以布爾值操作的點擊信號。 source = self.sender() 我們得到了被切換的按鈕。 if source.text() == "Red":self.col.setRed(val) 如果它是紅色按鈕,我們會相應地更新顏色的紅色部分。 self.square.setStyleSheet("QFrame { background-color: %s }" %self.col.name()) 我們使用樣式表來改變背景顏色。樣式表使用 setStyleSheet 方法更新。Figure: Toggle button
PyQt5 QSlider
QSlider 是一個具有簡單句柄的小部件。這個把手可以來回拉動。通過這種方式,我們為特定任務選擇了一個值。有時使用滑塊比輸入數字或使用旋轉框更自然。在我們的示例中,我們展示了一個滑塊和一個標簽。標簽顯示圖像。滑塊控制標簽。slider.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialThis example shows a QSlider widget.Author: Jan Bodnar Website: zetcode.com """from PyQt5.QtWidgets import (QWidget, QSlider,QLabel, QApplication) from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):sld = QSlider(Qt.Horizontal, self)sld.setFocusPolicy(Qt.NoFocus)sld.setGeometry(30, 40, 200, 30)sld.valueChanged[int].connect(self.changeValue)self.label = QLabel(self)self.label.setPixmap(QPixmap('mute.png'))self.label.setGeometry(250, 40, 80, 30)self.setGeometry(300, 300, 350, 250)self.setWindowTitle('QSlider')self.show()def changeValue(self, value):if value == 0:self.label.setPixmap(QPixmap('mute.png'))elif 0 < value <= 30:self.label.setPixmap(QPixmap('min.png'))elif 30 < value < 80:self.label.setPixmap(QPixmap('med.png'))else:self.label.setPixmap(QPixmap('max.png'))def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main() 在我們的示例中,我們模擬音量控制。通過拖動滑塊的手柄,我們可以更改標簽上的圖像。 sld = QSlider(Qt.Horizontal, self) 在這里,我們創建了一個水平 QSlider。 self.label = QLabel(self) self.label.setPixmap(QPixmap('mute.png')) 我們創建一個 QLabel 小部件并為其設置初始靜音圖像。 sld.valueChanged[int].connect(self.changeValue) 我們將 valueChanged 信號連接到用戶定義的 changeValue 方法。 if value == 0:self.label.setPixmap(QPixmap('mute.png')) ... 根據滑塊的值,我們將圖像設置為標簽。在上面的代碼中,如果滑塊為零,我們將 mute.png 圖像設置為標簽。Figure: QSlider widget
PyQt5 QProgressBar
進度條是我們處理冗長任務時使用的小部件。它是動畫的,以便用戶知道任務正在進行中。 QProgressBar 小部件在 PyQt5 工具包中提供水平或垂直進度條。程序員可以設置進度條的最小值和最大值。默認值為 0 和 99。progressbar.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialThis example shows a QProgressBar widget.Author: Jan Bodnar Website: zetcode.com """from PyQt5.QtWidgets import (QWidget, QProgressBar,QPushButton, QApplication) from PyQt5.QtCore import QBasicTimer import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.pbar = QProgressBar(self)self.pbar.setGeometry(30, 40, 200, 25)self.btn = QPushButton('Start', self)self.btn.move(40, 80)self.btn.clicked.connect(self.doAction)self.timer = QBasicTimer()self.step = 0self.setGeometry(300, 300, 280, 170)self.setWindowTitle('QProgressBar')self.show()def timerEvent(self, e):if self.step >= 100:self.timer.stop()self.btn.setText('Finished')returnself.step = self.step + 1self.pbar.setValue(self.step)def doAction(self):if self.timer.isActive():self.timer.stop()self.btn.setText('Start')else:self.timer.start(100, self)self.btn.setText('Stop')def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main() 在我們的示例中,我們有一個水平進度條和一個按鈕。按鈕啟動和停止進度條。 self.pbar = QProgressBar(self) 這是一個 QProgressBar 構造函數。 self.timer = QBasicTimer() 要激活進度條,我們使用計時器對象。 self.timer.start(100, self) 要啟動計時器事件,我們調用它的 start 方法。此方法有兩個參數:超時和將接收事件的對象。 def timerEvent(self, e):if self.step >= 100:self.timer.stop()self.btn.setText('Finished')returnself.step = self.step + 1self.pbar.setValue(self.step) 每個 QObject 及其后代都有一個 timerEvent 事件處理程序。為了對計時器事件做出反應,我們重新實現了事件處理程序。 def doAction(self):if self.timer.isActive():self.timer.stop()self.btn.setText('Start')else:self.timer.start(100, self)self.btn.setText('Stop') 在 doAction 方法中,我們啟動和停止計時器。Figure: QProgressBar
PyQt5 QCalendarWidget
QCalendarWidget 提供基于月度的日歷小部件。它允許用戶以簡單直觀的方式選擇日期。calendar.py
#!/usr/bin/python""" ZetCode PyQt5 tutorial 此示例顯示了一個 QCalendarWidget 小部件。Author: Jan Bodnar Website: zetcode.com """from PyQt5.QtWidgets import (QWidget, QCalendarWidget,QLabel, QApplication, QVBoxLayout) from PyQt5.QtCore import QDate import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):vbox = QVBoxLayout(self)cal = QCalendarWidget(self)cal.setGridVisible(True)cal.clicked[QDate].connect(self.showDate)vbox.addWidget(cal)self.lbl = QLabel(self)date = cal.selectedDate()self.lbl.setText(date.toString())vbox.addWidget(self.lbl)self.setLayout(vbox)self.setGeometry(300, 300, 350, 300)self.setWindowTitle('Calendar')self.show()def showDate(self, date):self.lbl.setText(date.toString())def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main() 該示例有一個日歷小部件和一個標簽小部件。當前選擇的日期顯示在標簽小部件中。 cal = QCalendarWidget(self)The?QCalendarWidget?is created.
cal.clicked[QDate].connect(self.showDate) 如果我們從小部件中選擇日期,則會發出 clicked[QDate] 信號。我們將此信號連接到用戶定義的 showDate 方法。 def showDate(self, date):self.lbl.setText(date.toString()) 我們通過調用 selectedDate 方法來檢索選定的日期。然后我們將日期對象轉換為字符串并將其設置為標簽小部件。在 PyQt5 教程的這一部分中,我們介紹了以下小部件:QCheckBox、切換模式下的 QPushButton、QSlider、QProgressBar 和 QCalendarWidget。總結
以上是生活随笔為你收集整理的pyqt5教程9:Widgets组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyqt5教程8:对话框
- 下一篇: pyqt5教程10:Widgets2组件