PyQt5教程——對話框(6)


PyQt5中的對話框

對話框窗口或對話框是大多數主流GUI應用不可缺少的部分。對話是兩個或更多人之間的會話。在計算機應用中,對話框是一個用來和應用對話的窗口。對話框可以用來輸入數據,修改數據,改變應用設置等等。

 

輸入對話框

QInputDialog提供了一個簡單便利的對話框用於從用戶那兒獲得只一個值。輸入值可以是字符串,數字,或者一個列表中的列表項。

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

"""
ZetCode PyQt5 tutorial 

In this example, we receive data from
a QInputDialog dialog. 

author: Jan Bodnar
website: zetcode.com 
last edited: January 2015
"""

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit, 
    QInputDialog, QApplication)


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        self.btn = QPushButton('Dialog', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.showDialog)
        
        self.le = QLineEdit(self)
        self.le.move(130, 22)
        
        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Input dialog')
        self.show()
        
        
    def showDialog(self):
        
        text, ok = QInputDialog.getText(self, 'Input Dialog', 
            'Enter your name:')
        
        if ok:
            self.le.setText(str(text))
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

例子中有一個按鈕和一個單行編輯框組件。按下按鈕會顯示輸入對話框用於獲得一個字符串值。在對話框中輸入的值會在單行編輯框組件中顯示。

text, ok = QInputDialog.getText(self, 'Input Dialog', 
    'Enter your name:')

這一行會顯示一個輸入對話框。第一個字符串參數是對話框的標題,第二個字符串參數是對話框內的消息文本。對話框返回輸入的文本內容和一個布爾值。如果我們點擊了Ok按鈕,布爾值就是true,反之布爾值是false(譯者注:也只有按下Ok按鈕時,返回的文本內容才會有值)。

if ok:
    self.le.setText(str(text))

把我們從對話框接收到的文本設置到單行編輯框組件上顯示。

Input dialogFigure: Input dialog

顏色選擇對話框

QColorDialog類提供了一個用於選擇顏色的對話框組件。

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

"""
ZetCode PyQt5 tutorial 

In this example, we select a color value
from the QColorDialog and change the background
color of a QFrame widget. 

author: Jan Bodnar
website: zetcode.com 
last edited: January 2015
"""

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QFrame, 
    QColorDialog, QApplication)
from PyQt5.QtGui import QColor


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        col = QColor(0, 0, 0) 

        self.btn = QPushButton('Dialog', self)
        self.btn.move(20, 20)

        self.btn.clicked.connect(self.showDialog)

        self.frm = 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 = QColorDialog.getColor()

        if col.isValid():
            self.frm.setStyleSheet("QWidget { background-color: %s }"
                % col.name())
            
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

例子中顯示了一個按鈕和一個QFrame。將QFrame組件的背景設置為黑色。使用顏色選擇框類,我們可以改變它的顏色。

col = QColor(0, 0, 0) 

初始化QtGuiQFrame組件的背景顏色。

col = QColorDialog.getColor()

這一行彈出顏色選擇框。

if col.isValid():
    self.frm.setStyleSheet("QWidget { background-color: %s }"
        % col.name())

如果我們選中一個顏色並且點了ok按鈕,會返回一個有效的顏色值。如果我們點擊了Cancel按鈕,不會返回選中的顏色值。我們使用樣式表來定義背景顏色。

字體選擇框

 QFontDialog是一個用於選擇字體的對話框組件。

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

"""
ZetCode PyQt5 tutorial 

In this example, we select a font name
and change the font of a label. 

author: Jan Bodnar
website: zetcode.com 
last edited: January 2015
"""

import sys
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton, 
    QSizePolicy, QLabel, QFontDialog, QApplication)


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        vbox = QVBoxLayout()

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

        vbox.addWidget(btn)

        btn.clicked.connect(self.showDialog)
        
        self.lbl = QLabel('Knowledge only matters', self)
        self.lbl.move(130, 20)

        vbox.addWidget(self.lbl)
        self.setLayout(vbox)          
        
        self.setGeometry(300, 300, 250, 180)
        self.setWindowTitle('Font dialog')
        self.show()
        
        
    def showDialog(self):

        font, ok = QFontDialog.getFont()
        if ok:
            self.lbl.setFont(font)
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在我們的例子中,我們有一個按鈕和一個表情。通過字體選擇對話框,我們可以改變標簽的字體。

font, ok = QFontDialog.getFont()

在這兒我們彈出一個字體對話框。getFont()方法返回字體名字和布爾值。如果用戶點擊了OK,布爾值為True;否則為False。

if ok:
    self.label.setFont(font)

如果我們點擊了Ok按鈕,標簽字體會被改變。

Font dialogFigure: Font dialog

文件對話框

文件對話框是用於讓用戶選擇文件或目錄的對話框。可以選擇文件的打開和保存。

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

"""
ZetCode PyQt5 tutorial 

In this example, we select a file with a
QFileDialog and display its contents
in a QTextEdit.

author: Jan Bodnar
website: zetcode.com 
last edited: January 2015
"""

import sys
from PyQt5.QtWidgets import (QMainWindow, QTextEdit, 
    QAction, QFileDialog, QApplication)
from PyQt5.QtGui import QIcon


class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

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

        openFile = QAction(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, 350, 300)
        self.setWindowTitle('File dialog')
        self.show()
        
        
    def showDialog(self):

        fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')

        if fname[0]:
            f = open(fname[0], 'r')

            with f:
                data = f.read()
                self.textEdit.setText(data)        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

示例中顯示了一個菜單欄,中間設置了一個文本編輯框組件,和一個狀態欄。點擊菜單項會顯示QtGui.QFileDialog(文件選擇框)對話框,用於選擇一個文件。文件的內容會被讀取並在文本編輯框組件中顯示。

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()

示例基於QMainWindow組件,因為我們中心需要設置一個文本編輯框組件。

fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')

彈出文件選擇框。第一個字符串參數是getOpenFileName()方法的標題。第二個字符串參數指定了對話框的工作目錄。默認的,文件過濾器設置成All files (*)。

if fname[0]:
    f = open(fname[0], 'r')

    with f:
        data = f.read()
        self.textEdit.setText(data)        

選中文件后,讀出文件的內容,並設置成文本編輯框組件的顯示文本、

File DialogFigure: File dialog

這部分的PyQt5教程中,我們學習了幾種對話框的使用。


免責聲明!

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



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