pyqt5 窗體布局


窗體布局

1使用qtdesigner新建一個對話框,然后拖放幾個按鈕和文本框,按鈕使用水平布局,效果如下:

 

鼠標選中水平布局再選中文本框,進行垂直布局,如下:

 

垂直布局后的效果如下:

 

然后,如何讓窗體中的控件隨着窗體大小的變化而變化大小呢?這個時候就要用到頂層布局了,使用網格布局,在窗體空白處點擊右鍵,如下:

 

布局后的效果:

 

到此,布局就完成了,試着拖動一下窗體大小,看看里面的控件大小是否隨之變化。

 

下面來熟悉一個重要屬性:

點擊文本框,在屬性欄中找到如下屬性:

 

水平策略和垂直策略用來表示控件縮放的,說明如下:

Fixed: 當前大小是最合適的,不能改變

Minimum: 當前大小已經是最小, 不能再縮小了, 但可以放大。

Maximum: 當前大小已經是最大, 不能再放大了,但可以縮小。

Preferred:  這個感覺不好用,不會用

Expanding: 可以增大或者縮小。在上面例子中文本框的水平和垂直策略就是expanding

需要注意的問題:在窗體中布局后,打開對象查看器,最頂層的對象不是Form,而是QWidget

 

在我們的界面邏輯類中需要將原來的代碼做出相應的修改,如下:

class SimpleDialogForm(Ui_Form, QtWidgets.QMainWindow):改為

class SimpleDialogForm(Ui_Form, QtWidgets.QWidget):

 

2界面設計完成后,需要綁定信號和槽,有兩種設計方法,第一種是在qtdesigner中將所有用到的按鈕事件全部綁定,然后在界面邏輯類中覆寫槽方法。第二種是在QtDesigner中僅將與系統事件相關的信號綁定(比如關閉事件)。在此我們使用第二種方法。

進入信號和槽的編輯界面,操作方法如下:

 

在編輯界面中,點擊close按鈕,拖動到窗體空白處,彈出的窗體中,選擇close事件,此時按鈕的click事件就會執行窗體的close方法。

 

到此完成了窗體的設計,還有一個問題

 

使用pyuic5 simpleDialog.py > ui_simpledialog.py 命令完成窗體邏輯類的代碼生成。

 

在我們自己編寫的窗體邏輯類中,綁定打開和保存的按鈕信號,並且覆寫窗體的關閉事件,我們需要在窗體關閉時,彈出一個確認對話框。

代碼如下:

from PyQt5 import QtCore, QtGui, QtWidgets

from ui_simpledialog import Ui_Form

import sys

import os

import codecs

class SimpleDialogForm(Ui_Form, QtWidgets.QWidget):

    def __init__(self, parent = None):

        super(SimpleDialogForm, self).__init__()

        self.setupUi(self)

        #binding slot

        self.btnOpen.clicked.connect(self.openFile)

        self.btnSaveas.clicked.connect(self.saveasFile)

 

    def openFile(self):

        fd = QtWidgets.QFileDialog(self)

        fileName,filetype = fd.getOpenFileName(caption = "open txt file", directory = 'd:/',filter = "Text Files (*.txt)")

        if os.path.exists(fileName):

            with codecs.open(fileName,"r","utf-8") as f:

                txt = f.read()

                self.textEdit.setText(txt)

            print(filetype)

 

    def saveasFile(self):

        fd = QtWidgets.QFileDialog(self)

        fileName,fileType = fd.getSaveFileName(caption = 'save a file as ', directory = '',filter = "Text Files (*.txt)")

if fileName == '':

return

        with codecs.open(fileName,'w','utf-8') as f:

            f.write(self.textEdit.toPlainText())

        pass

 

    '''override windows close event, we need a query messagebox'''

    def closeEvent(self, event):

        result = QtWidgets.QMessageBox.question(self, "Confirm Exit...",

                            "Are you sure you want to exit ?", QtWidgets.QMessageBox.Yes| QtWidgets.QMessageBox.No)

        event.ignore()

        if result == QtWidgets.QMessageBox.Yes:

            event.accept()

        pass

 

    def yourFunctions(self):

        pass

 

if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)

    main = SimpleDialogForm()

    main.show()

    sys.exit(app.exec_())

 

幾處要說明的地方:

1文件的讀取寫入,一定要指明編碼格式。

2文件的操作最好放在with語句塊中,完成之后python自動關閉

3瀏覽對話框的幾個參數要記住:

fd.getOpenFileName(caption = "open txt file", directory = 'd:/',filter = "Text Files (*.txt)")

記不住的話就在python idle中使用help命令自己查。

4為了不讓自己被編碼格式搞蒙,請使用codecs模塊(它可以處理現在任意編碼的字符)。

 

到此,一個完整的窗體就完成了。

 

其實直接使用example中的例子就行,稍微改改,一個窗體就很完美了。


免責聲明!

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



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