python qt 拖拽組件使用方法_Python QT組件庫qtwidgets的使用

雖然Qt提供了不少現成的組件,但是在Python中使用PyQt5或PySide2進行圖形界面程序開發的過程,還是免不了要根據自己的需求組合一些小部件以形成新的自定義組件。

最近州的先生在寫一個桌面圖形界面的登錄密碼框的過程中,發現了這樣一個小巧的自定義組件庫。

其目前提供了密碼輸入框組件、漸變組件、均衡器組件、調色板組件。

安裝

直接使用 pip 工具進行安裝即可,命令如下:

pip install qtwidgets

密碼輸入框

在PyQt5和PySide2中,我們一般使用QLineEdit()小部件,通過設置它的EchoMode屬性來讓輸入的文本顯示星號而非明文,代碼如下所示:

# encoding:utf-8

from PySide2 import QtWidgets

import sys

class 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()

運行后的效果如下所示:

在現代的登錄界面中,默認輸入密碼為密文,然后通過一個按鈕允許用戶查看自己輸入的密碼,是一個很常見的功能。

如果我們要基于QLineEdit()組件來擴展的話,就得花很多時間和代碼來實現。借助qtwidgets模塊,咱們就可以少造一點輪子了。

from PySide2 import QtWidgets

from qtwidgets import PasswordEdit

import sys

class 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 QtWidgets

from qtwidgets import PasswordEdit,Gradient

import sys

class 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 QtWidgets

from qtwidgets import PasswordEdit,Gradient,PaletteGrid,PaletteHorizontal,PaletteVertical

import sys

class 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各個原生組件運用的理解。

文章版權所有:州的先生博客,轉載必須保留出處及原文鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394169.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

get與post區別

兩種 HTTP 請求方法:GET 和 POST 在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。 GET - 從指定的資源請求數據。POST - 向指定的資源提交要被處理的數據GET 方法 請注意,查詢字符串(名稱/…

java 實現 sql join_Sql 數據庫 join 連接

sql里面有兩個連接一個是union,另一個就是join他們兩個的區別:union 連接的是行 是一行一行的連 而 join 連接的是列(字段) (他們倆的區別暫時就就知道這點)join連接的使用的前提:1.必須要有至少一個表(一個表可以用自連接)2.必須要有相關聯的列(字段)&#xff…

開源與云計算

本文講的是開源與云計算,【IT168 資訊】幾年來我一直擔心開源運動可能會遭受Kim Stanley Robinson在“Green Mars”中精辟論述的問題:“歷史的浪潮比我們做得還要快。”創新者被拋在后面,他們曾經改變的世界拿著他們的主意向著意想不到的方向…

c/c++連接mysql數據庫設置及亂碼問題(vs2013連接mysql數據庫,使用Mysql API操作數據庫)...

我的安裝環境: (1)vs2013(32位版) (vs2013只有32位的 沒有64位的,但是它可以編譯出64位的程序) ; (2)mysql-5.7.15(64位) vs2013中的設置(按步驟來,順序不要亂) (1)首先在vs2013中新建一個控制臺程序 Mysq…

leetcode542. 01 矩陣(bfs/dp)

給定一個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。 兩個相鄰元素間的距離為 1 。 示例 1: 輸入: 0 0 0 0 1 0 0 0 0 輸出: 0 0 0 0 1 0 0 0 0 bfs代碼 class Solution {int[][] res;public int[][] updateMatrix(int[][] matrix) {int[][] dirnew…

react本地儲存_如何使用React和本地存儲構建freeCodeCamp的配方框

react本地儲存by Edward Njoroge愛德華尼約格(Edward Njoroge) 如何使用React和本地存儲構建freeCodeCamp的配方框 (How to build freeCodeCamp’s recipe box using React and local storage) I completed my first edition of the Free Code Camp recipe box project on May…

調用接口返回500_公交卡余額查詢接口開放使用啦!

API說明本API返回數據僅支持JSON格式且會對中文進 行unicode 編碼,JSON格式返回數據基本格式如下:{"errCode": 0,"errMsg": "OK","data": {}}其中 errCode 表示請求狀態,0表示請求成功, …

stark組件開發之組合搜索基本顯示

數據的獲取,上一篇,已經有了!然后就是,如何進行展示的問題。到了展示這里,又有了新的問題, 因為從數據庫,取得的數據。 分為 queryset 和 tuple 兩種數據結構。tuple 中,只是字符串。…

美國安全廠商在云安全上的最新進展

本文講的是美國安全廠商在云安全上的最新進展,【IT168 資訊】優利系統公司日前推出了一系列云產品和服務,并且著重強調企業創建私有云,公有云或混合云工具的安全。  Unisys Secure Cloud是優利系統公司推出的一種管理云服務,承諾…

hessianphp java_hessian 在PHP中的使用

一、hessian是什么?看到這個單詞我還不知道怎么讀,音標是[hes]讀黑森。Hessian是一個輕量級的遠程的數據交換工具,使用簡單的方法提供了RMI(遠程方法調用)的功能. 相比WebService,Hessian更簡單、快捷。采用的是二進制RPC協議&…

leetcode1025. 除數博弈(dp/數學)

愛麗絲和鮑勃一起玩游戲&#xff0c;他們輪流行動。愛麗絲先手開局。 最初&#xff0c;黑板上有一個數字 N 。在每個玩家的回合&#xff0c;玩家需要執行以下操作&#xff1a; 選出任一 x&#xff0c;滿足 0 < x < N 且 N % x 0 。 用 N - x 替換黑板上的數字 N 。 如…

100萬用戶服務器_我的應用在一個月內如何增長超過100萬用戶

100萬用戶服務器by Assaf Elovic通過阿薩夫埃洛維奇 我的應用在一個月內如何增長超過100萬用戶 (How my app grew by over 1M users in one month) 只需要這種簡單的每周方法和耐心。 (All it took was this simple weekly approach and patience.) Building and promoting a …

原生支付url參數錯誤_小程序支付

下載微信JSAPI支付的 SDK : https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php.zip &#xff1b;解壓后放在extend 文件夾下&#xff0c;命名為wepay下載你的商戶證書&#xff0c;放在extend/wepay/cert/ 文件夾下面。自行將 extend/wepay/example/WxPay.Config.p…

Android清理設備內存具體完整演示樣例(二)

版權聲明&#xff1a; https://blog.csdn.net/lfdfhl/article/details/27672913 MainActivity例如以下: package cc.c;import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.List; import android.app.Activity; import a…

java圖片合成視頻_使用JAVACV把圖片合成視頻

使用JAVACV1.2把圖片合成視頻&#xff0c;直接上代碼。自己mark一下&#xff0c;也希望能夠幫助更多的人。package test;import static org.bytedeco.javacpp.opencv_imgcodecs.cvLoadImage;import java.io.File;import org.bytedeco.javacpp.avcodec;import org.bytedeco.java…

NPOI導出Excel

首先在官網去下載NPOI&#xff0c;把dll引用到項目中&#xff0c;然后獲取列表調用下面的方法就可以導出 后臺代碼&#xff1a; /// <summary> /// NPOI導出Excel /// </summary> /// <param name"dt"></param> /// <param name"fil…

leetcode1028. 從先序遍歷還原二叉樹(dfs/棧)

我們從二叉樹的根節點 root 開始進行深度優先搜索。 在遍歷中的每個節點處&#xff0c;我們輸出 D 條短劃線&#xff08;其中 D 是該節點的深度&#xff09;&#xff0c;然后輸出該節點的值。&#xff08;如果節點的深度為 D&#xff0c;則其直接子節點的深度為 D 1。根節點的…

react jest測試_如何使用Jest和react-testing-library測試Socket.io-client應用程序

react jest測試by Justice Mba由Mba法官 如何使用Jest和react-testing-library測試Socket.io-client應用程序 (How to test a Socket.io-client app using Jest and the react-testing-library) Testing the quality of real-time Socket.io-client integration seems to have…

統計學會用到python嗎_統計學學的統計軟件深嗎(例如Python)普通一本統計學大一不知道該干什么?...

統計學的話&#xff0c;不考慮把基礎課和專業課好好學一學嘛&#xff5e; 大一的話數分高代幾何已經占了很長時間啦&#xff0c;多刷刷題&#xff0c;把績點和排名搞得高一點是重中之重嘛&#xff5e;再說學習語言的事兒&#xff5e; 要說日常使用&#xff0c;那還是更推薦pyth…

枚舉轉中文,通過反射方法與描述的方式獲取

示例&#xff1a; 有人為了顯示中文&#xff0c;這樣定義枚舉嗎&#xff1f; publicenum TimeOfDay { 上午, 下午, 晚上 }; 這樣定義&#xff0c;很別扭&#xff0c;特別是在使用的時候&#xff0c; 比如&#xff0c;this.Time TimeOfDay.上午; 而…