對話框窗口或?qū)υ捒蚴谴蠖鄶?shù)主流GUI應(yīng)用不可缺少的部分入愧。對話是兩個或更多人之間的會話涉兽。在計(jì)算機(jī)應(yīng)用中叫胖,對話框是一個用來和應(yīng)用對話的窗口草冈。對話框可以用來輸入數(shù)據(jù),修改數(shù)據(jù)瓮增,改變應(yīng)用設(shè)置等等怎棱。
一、輸入對話框
QInputDialog提供了一個簡單便利的對話框用于從用戶那兒獲得只一個值绷跑。輸入值可以是字符串拳恋,數(shù)字,或者一個列表中的列表項(xiàng)砸捏。
import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit,
QInputDialog, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.my_UI()
def my_UI(self):
self.btn = QPushButton('輸入對話', 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, 250)
self.setWindowTitle('輸入對話')
self.show()
def showDialog(self):
text, ok = QInputDialog.getText(self, '輸入對話',
'輸入你的名字:')
#這一行會顯示一個輸入對話框谬运。第一個字符串參數(shù)是對話框的標(biāo)題,
#第二個字符串參數(shù)是對話框內(nèi)的消息文本垦藏。對話框返回輸入的文本
#內(nèi)容和一個布爾值梆暖。如果我們點(diǎn)擊了Ok按鈕,布爾值就是true膝藕,反
#之布爾值是false(也只有按下Ok按鈕時式廷,返回的文本內(nèi)容才會有值)。
if ok:
self.le.setText(str(text)) #把從對話框接收到的文本設(shè)置到單行編輯框組件上顯示芭挽。
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
例子中有一個按鈕和一個單行編輯框組件滑废。按下按鈕會顯示輸入對話框用于獲得一個字符串值。在對話框中輸入的值會在單行編輯框組件中顯示袜爪。
二蠕趁、顏色選擇對話框
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.my_UI()
def my_UI(self):
col = QColor(0, 0, 0) #初始化組件的背景顏色黑色辛馆,用在下面的QFrame組件
self.btn = QPushButton('選擇顏色', self)
self.btn.move(20, 20)
self.btn.clicked.connect(self.showDialog) #將按鈕的點(diǎn)擊動作連接到下面的showDialog方法
self.frm = QFrame(self) #使用QFrame組件
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name()) #使用樣式表來定義背景顏色俺陋,將組件背景設(shè)為黑色
self.frm.setGeometry(130, 22, 100, 100)
self.setGeometry(300, 300, 300, 250)
self.setWindowTitle('顏色選擇對話框')
self.show()
def showDialog(self):
col = QColorDialog.getColor() #這一行彈出顏色選擇框
if col.isValid():
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name())
#如果我們選中一個顏色并且點(diǎn)了ok按鈕
#會返回一個有效的顏色值,cancel則不會
#設(shè)置新的樣式表,即應(yīng)用新的背景顏色
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
例子中顯示了一個按鈕和一個QFrame昙篙。將QFrame組件的背景設(shè)置為黑色腊状。使用顏色選擇框類,我們可以改變它的顏色苔可。
三缴挖、字體選擇框
QFontDialog是一個用于選擇字體的對話框組件。
import sys
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QPushButton,
QSizePolicy, QLabel, QFontDialog, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.my_UI()
def my_UI(self):
vbox = QVBoxLayout() #垂直布局
btn = QPushButton('選擇字體', self)
btn.setSizePolicy(QSizePolicy.Fixed, #焚辅?
QSizePolicy.Fixed)
btn.move(20, 20)
vbox.addWidget(btn)
btn.clicked.connect(self.showDialog) #將點(diǎn)擊連接到下面的showDialog方法
self.lbl = QLabel('好好學(xué)習(xí)映屋,天天向上', self) #不直接lbl = QLabel()是因?yàn)橄旅娣椒ㄟ€得調(diào)用
self.lbl.move(130, 20)
vbox.addWidget(self.lbl)
self.setLayout(vbox)
self.setGeometry(300, 300, 300, 250)
self.setWindowTitle('字體對話框')
self.show()
def showDialog(self):
font, ok = QFontDialog.getFont() #彈出一個字體對話框苟鸯。getFont()方法返回字體名字和布爾值
if ok: #如果用戶點(diǎn)擊了OK,布爾值為True棚点;否則為False
self.lbl.setFont(font) #即點(diǎn)擊了Ok按鈕早处,標(biāo)簽字體會被改變。
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
在我們的例子中瘫析,我們有一個按鈕和一個表情砌梆。通過字體選擇對話框,我們可以改變標(biāo)簽的字體颁股。
四么库、文件對話框
文件對話框是用于讓用戶選擇文件或目錄的對話框「视校可以選擇文件的打開和保存。
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.my_UI()
def my_UI(self):
self.textEdit = QTextEdit() #增加文本編輯器
self.setCentralWidget(self.textEdit) #設(shè)置為中心布局
self.statusBar() #增加狀態(tài)欄
openFile = QAction(QIcon('open.png'), '打開', self) #增加打開文件動作
openFile.setShortcut('Ctrl+O') #連接快捷鍵
openFile.setStatusTip('打開新文件') #顯示狀態(tài)欄提示
openFile.triggered.connect(self.showDialog) #觸發(fā)則連接showDialog方法
menubar = self.menuBar() #增加菜單欄
fileMenu = menubar.addMenu('&文件') #增加菜單
fileMenu.addAction(openFile) #菜單里增加動作
self.setGeometry(300, 300, 350, 300)
self.setWindowTitle('文件對話框')
self.show()
def showDialog(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')
#彈出文件選擇框
#第一個字符串參數(shù)是getOpenFileName()方法的標(biāo)題葡缰。第二個字符串參數(shù)
#指定了對話框的工作目錄亏掀。默認(rèn)的,文件過濾器設(shè)置成All files (*)泛释。
if fname[0]:
f = open(fname[0], 'r')
with f:
data = f.read()
self.textEdit.setText(data)
#選中文件后滤愕,讀出文件的內(nèi)容,并設(shè)置成文本編輯框組件的顯示文本
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
示例中顯示了一個菜單欄怜校,中間設(shè)置了一個文本編輯框組件间影,和一個狀態(tài)欄。點(diǎn)擊菜單項(xiàng)會顯示QtWidgets.QFileDialog(文件選擇框)對話框茄茁,用于選擇一個文件魂贬。文件的內(nèi)容會被讀取并在文本編輯框組件中顯示。