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

把我们从对话框接收到的文本设置到单行编辑框组件上显示。

Figure: 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按钮,标签字体会被改变。

Figure: 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)        

选中文件后,读出文件的内容,并设置成文本编辑框组件的显示文本、

Figure: File dialog

这部分的PyQt5教程中,我们学习了几种对话框的使用。

时间: 2024-10-15 23:55:34

PyQt5教程——对话框(6)的相关文章

PyQt5教程——布局管理(4)

PyQt5中的布局管理 布局管理是GUI编程中的一个重要方面.布局管理是一种如何在应用窗口上防止组件的一种方法.我们可以通过两种基础方式来管理布局.我们可以使用绝对定位和布局类. 绝对定位 程序指定了组件的位置并且每个组件的大小用像素作为单位来丈量.当你使用了绝对定位,我们需要知道下面的几点限制: 如果我们改变了窗口大小,组件的位置和大小并不会发生改变. 在不同平台上,应用的外观可能不同 改变我们应用中的字体的话可能会把应用弄得一团糟. 如果我们决定改变我们的布局,我们必须完全重写我们的布局,这

PyQt5教程——事件和信号(5)

PyQt5中的事件和信号 在这部分PyQt5编程教程中,我们探索应用中事件和信号的发生. 事件 所有的GUI应用都是事件驱动的.事件主要由应用的用户操作产生的.但是事件可能由其他条件触发,比如:一个网络连接,一个窗口管理器,一个定时器,这些动作都可能触发事件的产生.当我们调用应用的exec_()方法时,应用进入了主循环.主循环用于检测事件的产生并且将事件送到用于处理的对象中去. 在事件模型,有三个参与者 事件源 事件对象 事件目标 事件源是状态发生改变的对象.它产生了事件.事件对象(evnet)

PyQt5教程——组件 Ⅱ(八)

这部分的教程将会继续介绍PyQt5的组件.我们这节教程的内容将包括像素图(QPixmap),单行文本框(QLineEdit)和下拉列表框(QComboBox) 像素图(QPixmap) 像素图(QPixmap)是各种用于处理图像的组件中的一个.它是在屏幕上显示图片的最佳选择.在我们代码例子中,我们将使用像素图来在窗口上显示一个图片. #!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial In

PyQt5教程——组件(7)

PyQt5中的组件(widgets) 组件(widgets)是构建一个应用的基础模块.PyQt5有广泛的各式各样的组件,包含按钮,复选按钮,滑块条,和列表框.在这个部分的教程中,我们将学习几种有用的组件:复选按钮(QCheckBox),切换按钮(ToggleButton),滑块条(QSlider),进度条(ProgressBar)和日历组件(QCalendarWidget). 复选框(QCheckBox) 复选框组件有两种状态:选中和未选中.它是由一个选择框和一个标签组成的.一个应用中,复选框是

PyQt5标准对话框

很全的Qt的标准对话框,包含QInputDialog.QColorDialog.QFontDialog.QMessageBox.QOpenFileDialog... 全部是由官网的C++版本,转换成PyQt5版本. 有些细节忽略了,因为实在不知怎么转换过来.捣鼓了一晚上,总算完成了,好累啊,不过很开心! 效果图: 完整代码: 1 # -*- coding: utf-8 -*- 2 from PyQt5.QtGui import * 3 from PyQt5.QtCore import * 4 f

Python _PyQt5对话框

Python 调用PyQt5 制作对话框,退出时候有二次确认(注:默认是直接退出) 1 # -*- ytf-8 -*- 2 """ 3 用PyQt建一个对话框,退出时提示有二次确认 4 """ 5 6 import sys 7 from PyQt5.QtWidgets import QApplication,QMessageBox,QWidget 8 9 class myWin(QWidget): 10 def __init__(self): 1

PyQt5——DAY3

PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类提供了一个应用主窗口.默认创建一个拥有状态栏.工具栏和菜单栏的经典应用窗口骨架. 状态栏 状态栏是用来显示状态信息的组件. 1 #!/usr/bin/python3 2 # -*- coding:utf-8 -*- 3 #__author:Administrator 4 #date:2018/7/2

python中pyqt5的进度条--python实战(十)

python太博大精深了,使用场景非常多.最近笔者一直使用PyQt5编一些小程序,顺便就把一些常用的东西列出来,做个记录和积累吧.进度条是非常常用的东西,今天用的时候,顺便温习了一下,这个东西自己感觉没啥可讲的,最好的办法就是例子来说明:下面给一个简单的例子. 基本进度条使用: 进度条的函数如下: self.pbar = QProgressBar(self) //进度条的定义 self.pbar.setGeometry(30, 60, 100, 30) //进度条的大小和位置,前两个是位置,后两

Python3+PyCharm+PyQt5配置进行GUI开发

一.安装Python3.5以上版本. 链接:https://www.python.org/downloads/windows/ 二.安装PyQt5. 使用pip安装:1.进入 C:\Users\你的计算机用户名. 2.新建一个文件夹,命名为pip. 3.进入文件夹新建一个文本文件,命名pip,文件后缀为ini(即 pip.ini ). 4.编辑 pip.ini,这里采用阿里云镜像来下载python包. [global] index-url = http://mirrors.aliyun.com/