天天看點

pyqt樣式表文法筆記(中)pyqt樣式表文法筆記(中)

pyqt樣式表文法筆記(中)

pyqt

QSS

python

樣式表

一、彈窗

在日常的各種桌面軟體的使用中,我們都會碰到彈窗。例如注冊,登入的時候,會有相應的資訊彈窗,這裡就以資訊收集彈窗為例進行彈窗的說明。

常見的彈窗的資訊種類有文本類、數值類和下拉框選項這幾種。主要是通過調用QInputDialog這個類的各種方法實作的。下面分别介紹。

  • 1.文本類

    QInputDialog.getText(self,'彈窗标題','彈窗提示資訊','控件類型','控件裡的提示資訊')

    ('控件類型'一般為QLineEdit.Normal)

    具體詳見下面的示例。

  1. @pyqtSignature("") 
  2. def on_input_clicked(self): 
  3. (my_str,status) = QInputDialog.getText(self, '請在此輸入資訊', '請輸入您的姓名', QLineEdit.Normal, '姓名') 
  4. print(my_str) 
  5. print(status) 

代碼解釋:

QInputDialog.getText這一方法會傳回一個tuple,第一個元素是使用者輸入的資訊,第二個是傳回狀态,當使用者選擇'ok',則傳回True,若選擇'Cancel',則傳回false.

文本類彈窗

效果展示

my_str用于接收使用者輸入的資訊,status則表示傳回的布爾值

  • 2.數值類

    數值類分為整型(int)和浮點型(double)

    整型:QInputDialog.getInteger(self,'彈窗标題','彈窗提示資訊','預設值','最小值','最大值')

    浮點型: QInputDialog.getDouble(self,'彈窗标題','彈窗提示資訊','預設值','最小值','最大值')

QInputDialog.getInteger

解釋:

第"1"處,使用者可以用鍵盤上下鍵進行數值的變動,當然亦可用滑鼠

第"2"處,當使用者輸入比所設定的值大的數時是不會有反應的。也就是說,假如我們設定的最大值是99,當我輸入10,再想輸入0的時候是不會有反應的。懂?

  • 3.下拉框選項
  1. def on_list1_clicked(self): 
  2. my_list = QStringList() #這段我不能正常執行,但是視訊教程裡是這麼寫的,而且能運作 
  3. my_list.append("apple") 
  4. my_list.append('banana') 
  5. my_list.append('pear') 
  6. my_str, status = QInputDialog.getItem(self, '下拉框', '選擇你喜歡的水果', my_list) 
  7. print(my_str,status) 

看教程的時候完美運作,一到自己就出問題,反正就是說QStringList這個東西有問題,百度和谷歌了半天也沒找到解決辦法,後來直接用list就可以了。。。醉了。

  1. my_list = [] 
  2. ... 

下拉框效果圖

二、顯示圖檔

  • 1.顯示靜态圖檔

    要顯示圖檔,首先需要将圖檔導入進來,建議是将圖檔放到你目前檔案所在目錄。

    a.導入圖檔到資料總管

導入圖檔1

導入圖檔2

第一步建立.qrc檔案,儲存在目前目錄下。

第二步為字首取名(無限制)

第三步導入圖檔或其他檔案

b.拖拽圖檔視窗 Graphics View

Graphics View

c.修改樣式表

修改樣式表

如果隻是為了顯示圖檔建議選擇"border-image",因為它會自适應視窗。

  • 2.給圖檔添加事件
難道靜态圖檔就能滿足我們的要求嗎?為什麼不可以通過點選圖檔實作跳轉到網站或其他的功能呢?下面就來做這件事。

首先通過上面一個步驟,我們的目錄中已經有一個字尾為**.qrc**的檔案,我們需要将它轉化為.py檔案。

a.用指令行進行轉化

  1. # 将qrc檔案轉化為.py檔案 
  2. # 指令行需要進入到目前目錄下 
  3. pyrcc4 my_pic.qrc > test_rc.py 

之後我們得到了一個test_rc.py檔案,不知道為什麼,我執行的時候報錯了,錯誤如下

  1. Traceback (most recent call last): 
  2. File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6521, in <module> 
  3. qInitResources() 
  4. File "C:\Users\14356\Desktop\test_pyqt\test_rc.py", line 6516, in qInitResources 
  5. QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) 
  6. TypeError: qRegisterResourceData(int, str, str, str): argument 2 has unexpected type 'str' 

估計有事編碼的問題,omg!

三個參數通過指令行後生成的是str類型,但是函數調用有要求byte類型,這不扯蛋嗎?!沒辦好隻好将三個參數轉化成bytes類型。不過沒關系,bug來了就去解決吧~~在test_rc.py中添加如下代碼

  1. qt_resource_struct = qt_resource_struct.encode('utf-8') 
  2. qt_resource_name = qt_resource_name.encode('utf-8') 
  3. qt_resource_data = qt_resource_data.encode('utf-8') 

b. 修改槽函數代碼

需要在我們自己定義的類下初始化圖檔控件的滑鼠點選事件,并觸發我們自己定義的my_picEvent函數。

新增代碼如下

圖檔滑鼠事件

介紹一下webbrowser這個類,我們需要使用import webbrowser來引入這個類,然後當我們點選圖檔就會通過預設浏覽器打開網站了。牛逼!