对话框窗口或对话框是大多数现代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)
读取所选文件名,并将文件内容设置为文本编辑部件。