pyqt樣式表文法筆記(中)
pyqt
QSS
python
樣式表
一、彈窗
在日常的各種桌面軟體的使用中,我們都會碰到彈窗。例如注冊,登入的時候,會有相應的資訊彈窗,這裡就以資訊收集彈窗為例進行彈窗的說明。
常見的彈窗的資訊種類有文本類、數值類和下拉框選項這幾種。主要是通過調用QInputDialog這個類的各種方法實作的。下面分别介紹。
-
1.文本類
QInputDialog.getText(self,'彈窗标題','彈窗提示資訊','控件類型','控件裡的提示資訊')
('控件類型'一般為QLineEdit.Normal)
具體詳見下面的示例。
python 6行
- @pyqtSignature("")
- def on_input_clicked(self):
- (my_str,status) = QInputDialog.getText(self, '請在此輸入資訊', '請輸入您的姓名', QLineEdit.Normal, '姓名')
- print(my_str)
- print(status)
代碼解釋:
QInputDialog.getText這一方法會傳回一個tuple,第一個元素是使用者輸入的資訊,第二個是傳回狀态,當使用者選擇'ok',則傳回True,若選擇'Cancel',則傳回false.
my_str用于接收使用者輸入的資訊,status則表示傳回的布爾值
-
2.數值類
數值類分為整型(int)和浮點型(double)
整型:QInputDialog.getInteger(self,'彈窗标題','彈窗提示資訊','預設值','最小值','最大值')
浮點型: QInputDialog.getDouble(self,'彈窗标題','彈窗提示資訊','預設值','最小值','最大值')
解釋:
第"1"處,使用者可以用鍵盤上下鍵進行數值的變動,當然亦可用滑鼠
第"2"處,當使用者輸入比所設定的值大的數時是不會有反應的。也就是說,假如我們設定的最大值是99,當我輸入10,再想輸入0的時候是不會有反應的。懂?
- 3.下拉框選項
python 9行
- def on_list1_clicked(self):
- my_list = QStringList() #這段我不能正常執行,但是視訊教程裡是這麼寫的,而且能運作
- my_list.append("apple")
- my_list.append('banana')
- my_list.append('pear')
- my_str, status = QInputDialog.getItem(self, '下拉框', '選擇你喜歡的水果', my_list)
- print(my_str,status)
看教程的時候完美運作,一到自己就出問題,反正就是說QStringList這個東西有問題,百度和谷歌了半天也沒找到解決辦法,後來直接用list就可以了。。。醉了。
python 5行
- my_list = []
- ...
二、顯示圖檔
-
1.顯示靜态圖檔
要顯示圖檔,首先需要将圖檔導入進來,建議是将圖檔放到你目前檔案所在目錄。
a.導入圖檔到資料總管
第一步建立.qrc檔案,儲存在目前目錄下。
第二步為字首取名(無限制)
第三步導入圖檔或其他檔案
b.拖拽圖檔視窗 Graphics View
c.修改樣式表
如果隻是為了顯示圖檔建議選擇"border-image",因為它會自适應視窗。
- 2.給圖檔添加事件
難道靜态圖檔就能滿足我們的要求嗎?為什麼不可以通過點選圖檔實作跳轉到網站或其他的功能呢?下面就來做這件事。
首先通過上面一個步驟,我們的目錄中已經有一個字尾為**.qrc**的檔案,我們需要将它轉化為.py檔案。
a.用指令行進行轉化
python 4行
- # 将qrc檔案轉化為.py檔案
- # 指令行需要進入到目前目錄下
- pyrcc4 my_pic.qrc > test_rc.py
之後我們得到了一個test_rc.py檔案,不知道為什麼,我執行的時候報錯了,錯誤如下
python 7行
- Traceback (most recent call last):
- File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6521, in <module>
- qInitResources()
- File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6516, in qInitResources
- QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
- TypeError: qRegisterResourceData(int, str, str, str): argument 2 has unexpected type 'str'
估計有事編碼的問題,omg!
三個參數通過指令行後生成的是str類型,但是函數調用有要求byte類型,這不扯蛋嗎?!沒辦好隻好将三個參數轉化成bytes類型。不過沒關系,bug來了就去解決吧~~在test_rc.py中添加如下代碼
- qt_resource_struct = qt_resource_struct.encode('utf-8')
- qt_resource_name = qt_resource_name.encode('utf-8')
- qt_resource_data = qt_resource_data.encode('utf-8')
b. 修改槽函數代碼
需要在我們自己定義的類下初始化圖檔控件的滑鼠點選事件,并觸發我們自己定義的my_picEvent函數。
新增代碼如下
介紹一下webbrowser這個類,我們需要使用import webbrowser來引入這個類,然後當我們點選圖檔就會通過預設浏覽器打開網站了。牛逼!