【第七章】Dialogs in PyQt5(对话框)

对话框窗口或对话框是大多数现代GUI应用程序中不可或缺的一部分。对话框被定义为两个或更多人之间的对话。在计算机应用程序中,对话框是用于与应用程序“对话”的窗口。对话框可用于输入数据、更改数据及修改应用程序的设定等。

QInputDialog

QInputDialog提供了一个简单便捷的对话框,用于从用户获取单个值。输入值可以是字符串、数值或一个列表中的项目。

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, 22)
        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(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。

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

我们通过对话框获得的文本信息通过setText()方法显示到行编辑部件里面。

QColorDialog

QColorDialog提供了用于选择颜色值的对话框部件。

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, 100)
        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,窗口小部件背景设置为黑色,通过使用QColorDialog 我们可以更改其背景。

col = QColor(0, 0, 0)

这是QFrame的初始化默认背景。

col=QColorDialog.getColor()

这一行用来 弹出颜色对话框。

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

检查颜色是否有效,如果我们点击了取消按钮,则没有有效颜色返回,相反 如果返回的颜色是有效的,那么我么可以通过设置样式更改背景颜色。

QFontDialog

QFontDialog对话框用来选择字体。

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


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_())

以上示例中,我们使用了一个按钮和一个标签,我们可以通过QFontDialog更改标签中字体的样式。

font,ok = QFontDialog.getFont()

这里我们弹出一个字体对话框,通过getFont()方法返回字体的名称和一个布尔值,如果选择ok返回的布尔值为True,否则返回的为false。

if ok:
    self.label.setFont(font)

如果点击的是ok,将通过setFont()方法更改标签里的字体样式。

QFileDialog

QFileDialog是一个允许用户选择文件或目录的对话框,可以选择打开和保存文件。

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('test.jpg'), '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_())

该示例显示了菜单栏,集中设置的文本编辑窗口部件和状态栏。菜单栏显示用于选择文件的QFileDialog。文件的内容加载到文本编辑部件中。

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

该示例基于QMainWindow部件,因为我们集中设置了文本编辑部件。

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

弹出QFileDialog对话框,getOpenFileName()方法中的第一个字符串是标题,第二个字符串指定对话框工作的目录,默认情况下,文件筛选器设置为所有文件。

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

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

读取所选文件名,并将文件内容设置为文本编辑部件。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值