雖然Qt提供了很多現成的組件,可是在Python中使用PyQt5或PySide2進行圖形界面程序開發的過程,仍是免不了要根據本身的需求組合一些小部件以造成新的自定義組件。web
最近州的先生在寫一個桌面圖形界面的登陸密碼框的過程當中,發現了這樣一個小巧的自定義組件庫。微信
其目前提供了密碼輸入框組件、漸變組件、均衡器組件、調色板組件。app
下面咱們一塊兒來看看它的效果。
ide
安裝
直接使用 pip 工具進行安裝便可,命令以下:工具
pip install qtwidgets
ui
密碼輸入框
在PyQt5和PySide2中,咱們通常使用QLineEdit()小部件,經過設置它的EchoMode
屬性來讓輸入的文本顯示星號而非明文,代碼以下所示:spa
# encoding:utf-8from PySide2 import QtWidgetsimport sysclass Widget(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle("州的先生-zmister.com") self.pwd_input = QtWidgets.QLineEdit(self) self.pwd_input.setEchoMode(QtWidgets.QLineEdit.Password)def main(): app = QtWidgets.QApplication(sys.argv) gui = Widget() gui.show() sys.exit(app.exec_())if __name__ == '__main__': main()
.net
設計
3d
運行後的效果以下所示:
在現代的登陸界面中,默認輸入密碼爲密文,而後經過一個按鈕容許用戶查看本身輸入的密碼,是一個很常見的功能。
若是咱們要基於QLineEdit()組件來擴展的話,就得花不少時間和代碼來實現。藉助qtwidgets模塊,我們就能夠少造一點輪子了。
from PySide2 import QtWidgetsfrom qtwidgets import PasswordEditimport sysclass Widget(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("州的先生-zmister.com") # self.pwd_input = QtWidgets.QLineEdit(self) self.pwd_input = PasswordEdit() self.setCentralWidget(self.pwd_input)def main(): app = QtWidgets.QApplication(sys.argv) gui = Widget() gui.show() sys.exit(app.exec_())if __name__ == '__main__': main()
來看看使用qtwidgets提供的密碼輸入框的效果:
除了密碼輸入框,qtwidgets還提供了幾個擴展的組件。
漸變組件
漸變組件Gradient()提供了方便的界面來設計應用程序中的線性漸變。只需建立對象的實例便可建立新的漸變器。
from PySide2 import QtWidgetsfrom qtwidgets import PasswordEdit,Gradientimport sysclass Widget(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("州的先生-zmister.com") self.gradient = Gradient() self.setCentralWidget(self.gradient)def main(): app = QtWidgets.QApplication(sys.argv) gui = Widget() gui.show() sys.exit(app.exec_())if __name__ == '__main__': main()
默認的漸變顏色是從黑到白的。中止點使用一個紅色框進行標記。漸變器組件建立以後,咱們能夠在圖形界面上進行編輯:
在漸變器上雙擊能夠添加標記點,其顏色與右邊的顏色一致;
拖動標記點,能夠改變漸變色的範圍和位置;
右鍵單擊新建的標記點,能夠編輯標記點的顏色;
雙擊新建的標記點,能夠刪除此標記點。
下面,咱們來演示一下:
調色板
qtwidgets提供了三種調色板,分別是:
水平調色板PaletteHorizontal
垂直調色板PaletteVertical
網格調色板PaletteGrid
這三個調色板除了排列方式有所不一樣外,其餘的使用方法都同樣,都接受顏色列表參數,或預置的幾個顏色族,都支持selected選擇信號,下面咱們來演示一下:
from PySide2 import QtWidgetsfrom qtwidgets import PasswordEdit,Gradient,PaletteGrid,PaletteHorizontal,PaletteVerticalimport sysclass Widget(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("州的先生-zmister.com") self.palette_1 = PaletteGrid('category10') self.palette_2 = PaletteHorizontal('17undertones') self.palette_3 = PaletteVertical(['#000003', '#160B39', '#410967', '#6A176E', '#932567', '#BA3655', '#DC5039', '#F2751A', '#FBA40A', '#F6D542', '#FCFEA4']) self.palette_1.selected.connect(self.selected_color) self.label = QtWidgets.QLabel("點擊了:") self.widget = QtWidgets.QWidget() self.widget_layout = QtWidgets.QVBoxLayout() self.widget.setLayout(self.widget_layout) self.widget_layout.addWidget(self.palette_1) self.widget_layout.addWidget(self.palette_2) self.widget_layout.addWidget(self.palette_3) self.widget_layout.addWidget(self.label) self.setCentralWidget(self.widget) def selected_color(self,value): self.label.setText("點擊了:{}".format(value))def main(): app = QtWidgets.QApplication(sys.argv) gui = Widget() gui.show() sys.exit(app.exec_())if __name__ == '__main__': main()
其運行效果爲:
最後
還有一個均衡器組件,用於動態可視化輸出頻率的變化,在這裏就不演示了,有興趣的小夥伴能夠本身試一試。
除此以外,全部這些組件也都是基於Qt現有組件進行的封裝,學有餘力的小夥伴還能夠查看一下它們的源碼實現,以加深對Qt各個原生組件運用的理解。
🧐分享、點贊、在看,給個三連擊唄!👇
本文分享自微信公衆號 - 州的先生(zmister2016)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。