GUI學習之二十五——QFontDialog學習總結


今天學習字體對話框——QFontDialog()控件。

QFontDialog()是繼承自QDialog()的一個子類,用來選擇給定的字體(包括字體、字號、樣式等)

一.構造函數

QFontDialog()的聲明很簡單,可以直接調用

fd = QFontDialog()

還有一種方法是可以指定默認字體的(啟用后Sample框里會按照指定的字體顯示)

font = QFont()
font.setFamily('仿宋')
font.setPointSize(24)
fd = QFontDialog(font,self)

二.對話框的使用

在這里我們借用一個按鈕來啟動字體對話框,然后獲得對話框中選擇的字體。

這里有個知識點:我們在打開對話框的時候,用open()是可以傳遞一個槽函數的

QFontDialog.open(self, slot: PYQT_SLOT)

在對話框打開后,會自動連接fontSelected信號與此處指定的槽函數

方法1:利用open()函數,結合selectFont()函數

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()


    def UI_test(self):
        btn = QPushButton('選擇字體',self)
        font = QFont()
        font.setFamily('仿宋')
        font.setPointSize(24)
        fd = QFontDialog(font,self)
        self.fd = fd
        btn.clicked.connect(lambda :fd.open(self.func))
        pass

    def func(self,*args):
        print('字體選擇:',self.fd.selectedFont().family())   #獲取選擇的字體
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

方案2:利用exec的返回值,結合selectFont()函數

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()


    def UI_test(self):
        btn = QPushButton('選擇字體',self)
        fd = QFontDialog(self)
        def font_select():
            if fd.exec():
                print(fd.selectedFont().family())

        btn.clicked.connect(font_select)
        pass
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

因為exec是有返回值的,只有點擊了OK才返回1,而取消和關閉都是返回0。只有確認選擇了才獲取字體。

三.選項設置

可以通過代碼對按鈕等選項進行設置

QFontDialog.setOption(self, option: 'QFontDialog.FontDialogOption', on: bool = ...)
#FontDialogOption枚舉值
NoButtons                   # 不顯示確定取消按鈕(對實時的對話框有用)
DontUseNativeDialog         #在Mac上使用Qt的標准字體而不是Apple的原森字體
ScalableFonts               #顯示可縮放字體
NonScalableFonts            #顯示不可縮放字體
MonospacedFonts             #顯示等寬字體
ProportionalFonts           #顯示比例字體

我們可以試一下第一個方案,就是在一個實時對話框選擇不同字體然后在label里實時改變字體

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800,500)
        self.UI_test()


    def UI_test(self):
        label = QLabel('字體',self)
        label.move(100,200)
        self.label = label
        btn = QPushButton('選擇字體',self)
        font = QFont()
        font.setFamily('仿宋')
        font.setPointSize(24)
        fd = QFontDialog(font,self)
        fd.setOption(QFontDialog.NoButtons)
        self.fd = fd
        btn.clicked.connect(lambda :fd.open(self.func))
        pass
        fd.currentFontChanged.connect(self.label_font_change)
    def func(self,*args):
        print('字體選擇:',self.fd.selectedFont().family())   #獲取選擇的字體
    def label_font_change(self,font):
        self.label.setFont(font)
        self.label.adjustSize()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
實時改變字體

當然,上面的枚舉值是可以用管道符‘|’連接同時使用的。

四.靜態方法使用

QFontDialog.getFont()     #——>元組

我們先定義一個按鈕,按鈕連接這樣的槽函數

def func(self):
    result = QFontDialog.getFont()
    print(result)
    pass

每次調用槽函數會發現result是一個元組。元組里包含了一個字體對象還有一個布爾量。只有點擊確認鍵布爾量才為真。利用這個方法實現字體的靜態調整

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(800,500)
        self.UI_test()


    def UI_test(self):
        label = QLabel('字體',self)
        label.move(100,200)
        self.label = label
        btn = QPushButton('選擇字體',self)
        btn.clicked.connect(self.func)

    def func(self):
        result = QFontDialog.getFont()
        if result[1]:
            self.label.setFont(result[0])
       self.label.adjustSize()
pass if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())

getFont()還有一個高級一些的用法

QFontDialog(Font,parent,'對話框標題',字體過濾器)

五.信號

有兩個信號,一個是當前字體發生改變

QFontDialog.currentFontChanged(self, font: QtGui.QFont)

這個是只要選中的字體發生變化就發送信號(一般用在實時對話框中,上文中有案例)

QFontDialog.fontSelected(self, font: QtGui.QFont)

這個則是按下確定鍵時發送的信號。


免責聲明!

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



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