PyQt5學習教程14:顏色拾取對話方塊的使用
阿新 • • 發佈:2019-02-18
本文將介紹PyQt5中顏色拾取對話方塊的使用方法,我們將在上一個例程的基礎上,加入對TextBrowser背景顏色的更改功能,先看源程式。
源程式:
import sys from PyQt5.QtWidgets import QWidget, \ QPushButton, \ QToolTip, \ QMessageBox, \ QApplication, \ QDesktopWidget, \ QMainWindow, \ QAction, \ qApp, \ QVBoxLayout, \ QHBoxLayout, \ QTextBrowser, \ QLineEdit, \ QLabel, \ QInputDialog, \ QColorDialog from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont, \ QIcon # QMainWindow是QWidget的派生類 class CMainWindow(QMainWindow): def __init__(self): super().__init__() # ToolTip設定 QToolTip.setFont(QFont('華文楷體', 10)) # statusBar設定 self.statusBar().showMessage('準備就緒') # 退出Action設定 exitAction = QAction(QIcon('1.png'), '&Exit', self) exitAction.setShortcut('ctrl+Q') exitAction.setStatusTip('退出應用程式') exitAction.triggered.connect(qApp.quit) # qApp就相當於QCoreApplication.instance() # menuBar設定 menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction) # toolBar設定 self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) # 確認PushButton設定 btnOK = QPushButton("確認") btnOK.setToolTip("點選此按鈕將確認改變!") btnOK.setStatusTip("點選此按鈕將確認改變!") btnOK.clicked.connect(self.funOK) btnOK.resize(btnOK.sizeHint()) # 取消PushButton設定 btnCancel = QPushButton("取消") btnCancel.setToolTip("點選此按鈕將放棄改變!") btnCancel.setStatusTip("點選此按鈕將放棄改變!") btnCancel.clicked.connect(self.funCancel) btnCancel.resize(btnCancel.sizeHint()) # 退出PushButton設定 btnQuit = QPushButton('退出') btnQuit.setToolTip("點選此按鈕將退出應用程式!") btnQuit.setStatusTip("點選此按鈕將退出應用程式!") btnQuit.clicked.connect(qApp.quit) btnQuit.resize(btnQuit.sizeHint()) # 更改提示PushButton設定 btnTip = QPushButton('更改提示') btnTip.setToolTip("點選此按鈕將更改提示符!") btnTip.setStatusTip("點選此按鈕將更改提示符!") btnTip.clicked.connect(self.funTip) btnTip.resize(btnTip.sizeHint()) # 更改背景色PushButton設定 btnBackgroundColor = QPushButton('更改背景色') btnBackgroundColor.setToolTip("點選此按鈕將更改背景色!") btnBackgroundColor.setStatusTip("點選此按鈕將更改背景色!") btnBackgroundColor.clicked.connect(self.funBackgroundColor) btnBackgroundColor.resize(btnBackgroundColor.sizeHint()) # PushButton佈局 hBox1 = QHBoxLayout() hBox1.addStretch(1) hBox1.addWidget(btnBackgroundColor) hBox1.addWidget(btnTip) hBox1.addWidget(btnOK) hBox1.addWidget(btnCancel) hBox1.addWidget(btnQuit) # QTextBrwoser是隻讀的多行文字框,既可以顯示普通文字,又可以顯示HTML self.textBrowser = QTextBrowser() # 提示標籤 self.labTip = QLabel(">>>") # 單行文字框 self.lineEdit = QLineEdit("請輸入表示式,然後按確認鍵") self.lineEdit.selectAll() self.lineEdit.returnPressed.connect(self.funOK) # 佈局 hBox2 = QHBoxLayout() hBox2.addWidget(self.labTip) hBox2.addWidget(self.lineEdit) # 佈局 vBox = QVBoxLayout() vBox.addWidget(self.textBrowser) vBox.addLayout(hBox2) vBox.addLayout(hBox1) widget = QWidget() self.setCentralWidget(widget) # 建立的widget在窗體的中間位置 widget.setLayout(vBox) # 佈局完畢後,才可得到焦點 self.lineEdit.setFocus() # Window設定 self.resize(500, 300) self.center() self.setFont(QFont('華文楷體', 10)) self.setWindowTitle('PyQt5應用教程(snmplink編著)') self.setWindowIcon(QIcon('10.png')) self.show() def center(self): # 得到主窗體的框架資訊 qr = self.frameGeometry() # 得到桌面的中心 cp = QDesktopWidget().availableGeometry().center() # 框架的中心與桌面中心對齊 qr.moveCenter(cp) # 自身窗體的左上角與框架的左上角對齊 self.move(qr.topLeft()) def funOK(self): try: text = self.lineEdit.text() self.textBrowser.append("{} = <b>{}</b>".format(text, eval(text))) except: self.textBrowser.append("輸入的表示式<font color=red>“{}”</font>無效!".format(text)) def funCancel(self): self.lineEdit.clear() def funTip(self): # 返回兩個值:輸入的文字和點選的按鈕 text, ok = QInputDialog.getText(self, '請輸入新的提示符', '提示符:') if ok: self.labTip.setText(text) def funBackgroundColor(self): col = QColorDialog.getColor() if col.isValid(): self.textBrowser.setStyleSheet("QTextBrowser{background-color:%s}" % col.name()) def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: self.close() def closeEvent(self, QCloseEvent): reply = QMessageBox.question(self, 'PyQt5應用教程(snmplink編著)', "是否要退出應用程式?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: QCloseEvent.accept() else: QCloseEvent.ignore() if __name__ == '__main__': app = QApplication(sys.argv) MainWindow = CMainWindow() sys.exit(app.exec_())
程式解釋:
1、第17行:輸入QColorDialog模組,使用該模組,可新增顏色拾取對話方塊。
2、第79-83行:增加更改TextBrowser背景色的PushButton,與funBackgroundColor方法關聯。
3、第86-92行:對PushButton進行佈局。
4、第153行:定義funBackgroundColor方法。
5、第154行:呼叫QColorDialog的getColor方法得到使用者輸入的顏色。
6、第155行:判斷使用者輸入的顏色是否有效。
7、第156行:通過呼叫setStyleSheet方法,設定TextBrowser的背景色,其輸入的內容類似CSS,可以對字型,字號、顏色等很多功能進行設定,具體使用方法大家在網上搜索就好,或者檢視PyQt的幫助。
程式執行效果:
我們點選更改背景色PushButton儘可以對TextBrowser的背景顏色進行更改了。