一、使用qt designer拖拽界面。
使用qtdesigner拖拽界面:
如圖左側導航欄,1:Sources,2:Forms,3:Resouces
1:代碼,2:Qt Designer的拖拽界面的代碼,xml形式的 3:暫未使用,猜測用來放置一些圖片、音頻、視頻之類的。
在2:Forms中右鍵點擊,然后選擇new form,選擇 類型:Dialog然后會啟動Qt Designer,拖拽出如圖的界面。
二、在qt designer中 自定義信號/槽
在Qt Designer的界面中
1:編輯窗口組件,2:編輯信號/槽
點擊2,(注:初次操作生成界面時,自定義編輯信號/槽的步驟請跳過,否則界面無法生成對應的py代碼。)
點擊編輯后
圖中灰色的全是組件默認就有的槽,黑色的是自己定義的,自定義get_text()后。
在配置連接的彈框中選擇左側的clicked()與右側的get_text()然后點擊OK。
在右下角的位置將可以看見多出一行,如圖:
然后保存Qt Designer的界面,關閉不關閉皆可。
注:在生成Qt Designer界面對應的py代碼前一定不要寫自定義的信號/槽,否則會無法生成界面對應的py代碼的。
三、生成py代碼並顯示界面。
回到Eric6中的Forms,右擊剛才創建的form
點擊1,Compile form然后可以看到
然后就在Source下可以看到多出一個文件:Ui_main.py
然后再回到Forms下右擊main.ui選擇Generate Dialog Code...
點擊New...
注:Classname和Filename全是自動生成,算是默認值吧,點擊OK。
繼續點擊OK,會在Sources中發現多了個main.py文件。
雙擊main.py
注意雙下划線出的 .Ui_main的"."要去掉。
然后點擊F2
是不是和想要的界面沒出現,感覺不爽?
呵呵,沒事,因為上邊的代碼不會自動執行所以什么都沒出來。
在最下邊加入如下代碼
if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
window = Dialog() ### Dialog是main.py的上部的Class的名字
window.show()
sys.exit(app.exec_())
注意,這些代碼不用被包在class里邊了。
再點擊F2,就可以看見想要的界面了。
看見想要的界面出來了,小開心有木有。
四、實現自定義的信號/槽中的槽。
如果在生成Qt designer的界面的py代碼前自定義了信號/槽,則會在Generate Dialog Code...時提示error,其中get_text()是自定義的槽。
如果生成界面的py代碼前自定義了信號/槽,並在Generate Dialog Code...時提示如圖的error,回到Qt Designer中的右下角
刪除掉信號/槽的綁定就行。然后繼續執行步驟3。
執行步驟2,綁定信號/槽,綁定按鈕的點擊事件到主框的自定義的函數:get_text()。
在main.py的class Dialog中增加自定義函數
def get_text(self):
print('get_text')
print(self.textEdit.toPlainText()) ##獲取文本的內容。。。該函數也是百度查的,菜鳥一枚,大家理解哈。
再次執行步驟2,仍會提示沒有get_text屬性,忽略它就好繼續執行,此時界面對應的py代碼類已經存在了,不需要再次new了,直接生成就好。
F2執行main.py代碼,點擊綁定信號/槽的那個按鈕
點擊按鈕后打印文本框的內容,小開心有木有。
五、個人理解:
上代碼,全部的main.py的代碼也是自動生成就下邊幾行代碼是自己手動添加的、出處也是網上查的,Qt Designer界面自動生成的代碼就不上了,如下。
# -*- coding: utf-8 -*-
"""
Module implementing Dialog.
"""
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog
from Ui_main import Ui_Dialog
class Dialog(QDialog, Ui_Dialog):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor
@param parent reference to the parent widget (QWidget)
"""
super(Dialog, self).__init__(parent)
self.setupUi(self) ## 調用Qt Designer界面生成的代碼的布局函數,同時將自身以參數的形式傳遞過去,然后就可以調用本類Dialog的函數。
def get_text(self):
print('get_text')
print(self.textEdit.toPlainText()) ##可以直接調用父類的屬性,這個不錯,以后信號/槽 神馬的全都寫到單獨的類中,然后繼承界面的類,不錯不錯。
if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
window = Dialog() ## 類名,注意要和自己定義的類名一致。
window.show()
sys.exit(app.exec_())
