Py3+PyQt5+Eric6:學習記錄之第一天:點擊按鈕獲取文本框的值並輸出。


一、使用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_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM