1. 程式人生 > >PyQt4 學習筆記5之對話方塊

PyQt4 學習筆記5之對話方塊

PyQt4中的對話方塊

單擊此處檢視原文。

對話方塊視窗或對話方塊時現代GUI程式不可或缺的一部分。對話方塊被定義為兩個或兩個以上的人之間的談話。在計算機應用程式中,對話方塊用於和應用程式“談話”。一個對話方塊可以用於輸入資料、修改資料、改變應用程式配置等。

1 輸入對話方塊

QtGui.QInputDialog提供了一個簡單的用於獲取使用者單一值的對話方塊,輸入的值可以是字串、數字或者列表中的某一項。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui

class Example
(QtGui.QWidget):
def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.btn = QtGui.QPushButton('Dialog', self) self.btn.move(20, 20) self.btn.clicked.connect(self.showDialog) self.le = QtGui.QLineEdit(self) self.le.move(130
, 22) self.setGeometry(300, 300, 290, 150) self.setWindowTitle('Input dialog') self.show() def showDialog(self): # 建立輸入對話方塊,並獲取使用者輸入。 # 第一個字串時對話方塊標題,第二個字串是對話方塊顯示的訊息內容 # 對話方塊返回使用者輸入的文字和一個布林值。當點選‘Ok’按鈕時,布林值為True。 text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog'
, 'Enter your name:') if ok: # 將接收自對話方塊的內容在行編輯輸入框中顯示。 self.le.setText(str(text)) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()

在上述的示例中,我們建立了一個按鈕和一個行輸入編輯框。按鈕用於顯示輸入對話方塊並獲取輸入值,使用者輸入的資料將會在行輸入編輯框中顯示。

2 調色盤對話方塊

QtGui.QColorDialog提供了顏色選擇對話方塊。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()


    def initUI(self):

        # 初始化QtGui.QFrame的背景顏色。
        col = QtGui.QColor(0, 0, 0)

        self.btn = QtGui.QPushButton('Dialog', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.showDialog)

        self.frm = QtGui.QFrame(self)
        self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())
        self.frm.setGeometry(130, 22, 100, 100)

        self.setGeometry(300, 300, 250, 180)
        self.setWindowTitle('Color dialog')
        self.show()

    def showDialog(self):

        # 彈出調色盤對話方塊。
        col = QtGui.QColorDialog.getColor()

        # 檢測顏色值是否有效。如果點選‘Cancel’按鈕,返回無效的顏色值;
        # 如果顏色值有效,則改變QtGui.QFrame的背景顏色。
        if col.isValid():
            self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

上面的示例程式中建立了一個按鈕和一個QtGui.QFrame物件。QtGui.QFrame物件的背景顏色設定為黑色,通過使用QtGui.QColorDialog,我們可以修改起背景顏色。

3 字型對話方塊

QtGui.QFontDialog用於建立字型選擇對話方塊。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()


    def initUI(self):

        vbox = QtGui.QVBoxLayout()

        btn = QtGui.QPushButton('Dialog', self)
        btn.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        btn.move(20, 20)

        vbox.addWidget(btn)

        btn.clicked.connect(self.showDialog)

        self.lb1 = QtGui.QLabel('Knowledge only matters', self)
        self.lb1.move(130, 20)

        vbox.addWidget(self.lb1)
        self.setLayout(vbox)

        self.setGeometry(300, 300, 250, 180)
        self.setWindowTitle('Font dialog')
        self.show()

    def showDialog(self):

        # 彈出字型對話方塊,getFont()方法返回字型名和一個布林值。當
        # 點選‘Ok’按鈕時,該布林值為True,否則為False。
        font, ok = QtGui.QFontDialog.getFont()

        if ok:
            # 改變標籤的字型。
            self.lb1.setFont(font)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在上述示例中,我們建立了一個按鈕以及一個標籤。通過按鈕,我們可以呼叫QtGui.QFontDialog對話方塊設定字型,從而改變標籤的字型。

檔案對話方塊

QtGui.QFileDialog允許使用者選擇檔案或目錄。它可以用來選擇開啟或儲存檔案。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui

class Example(QtGui.QMainWindow):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()


    def initUI(self):

        self.textEdit = QtGui.QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.statusBar()

        openFile = QtGui.QAction(QtGui.QIcon('open.png'), 'Open', self)
        openFile.setShortcut('Ctrl+O')
        openFile.setStatusTip('Open new File')
        openFile.triggered.connect(self.showDialog)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(openFile) 

        self.setGeometry(300, 300, 250, 180)
        self.setWindowTitle('File dialog')
        self.show()

    def showDialog(self):

        # 第一個字串引數指定標題,第二個字串引數指定對話方塊的工作目錄。
        # 預設情況下,檔案過濾設定為所有檔案(*)。
        fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')

        f = open(fname, 'r')

        with f:
            # 讀取檔案內容,並在文字編輯對話方塊中顯示。
            data = f.read()
            self.textEdit.setText(data)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

上述示例中,我們建立了一個選單欄,一個居中的文字輸入框以及狀態列。選單項將建立一個QtGui.QFileDialog檔案選擇對話方塊用於選擇檔案,該檔案的內容將被載入到文字輸入框中。

由於我們將文字輸入框居中放置,因此基於QtGui.QMainWindow