《PyQT5軟件開發(fā) - 基礎(chǔ)篇》第6章 PyQt5對話框

對話框窗口或?qū)υ捒蚴乾F(xiàn)代GUI應(yīng)用程序最不可或缺的一部分烙肺。一個對話框被定義為兩個或兩個以上的人之間的談話氧卧。在計算機應(yīng)用程序?qū)υ捒虼翱谟糜凇敖徽劇睉?yīng)用程序。一個對話框用于輸入數(shù)據(jù),修改數(shù)據(jù),更改應(yīng)用程序設(shè)置等怎栽。

6.1 QInputDialog

QInputDialog提供了一種簡單方便的對話框從用戶得到一個值宿饱。輸入值可以是字符串,一個數(shù)字强饮,或一個項目從一個列表为黎。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
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姓迅。

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

對話框收到的文本消息會顯示在文本框中

6.2 QColorDialog

QColorDialog顯示一個用于選擇顏色值的對話框丁存。

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
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_())

這個應(yīng)用程序顯示一個按鈕和一個QFrame柱嫌。QFrame的背景為黑色屯换。通過QColorDialog,我們可以改變它的背景彤悔。

col = QColor(0, 0, 0) 
初始化QFrame的顏色為黑色
col = QColorDialog.getColor()
這一行代碼彈出QColorDialog
if col.isValid():
    self.frm.setStyleSheet("QWidget { background-color: %s }"
        % col.name())

我們要先檢查col的值。如果點擊的是Cancel按鈕晕窑,返回的顏色值是無效的杨赤。當顏色值有效時,我們通過樣式表(style sheet)來改變背景顏色植捎。

6.3 QFontDialog

QFontDialog對話框用以選擇字體

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
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_())

在這個例子中焰枢,我們創(chuàng)建了一個按鈕和一個標簽济锄,通過QFontDialog來改變標簽的字體

font, ok = QFontDialog.getFont()

這一行代碼彈出字體選擇對話框,getFont()方法返回字體名稱和ok參數(shù)荐绝,如果用戶點擊了ok他就是True,否則就是false

if ok:
    self.label.setFont(font)

如果我們點擊了ok很泊,標簽的字體就會被改變

6.4 QFileDialog

QFileDialog是一個讓用戶選擇文件和目錄的對話框委造,可用以選擇打開或保存文件

# -*- coding: utf-8 -*-
"""
author: BruceOu
last edited: 2020-06
"""
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_())

這個例子展示了一個菜單欄昏兆,中部TextEdit控件和一個狀態(tài)欄妇穴。菜單項Open會顯示用于選擇文件的QtGui.QFileDialog對話框。選定文件的內(nèi)容會加載到TextEdit控件中跑筝。

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

示例窗體繼承自QMainWindow瞒滴,因為我們要將TextEdit控件置于窗體中央。

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

彈出QFileDialog對話框虏两,第一個字符串參數(shù)是對話框的標題定罢,第二個指定對話框的工作目錄,默認情況下文件篩選器會匹配所有類型的文件(*)

if fname[0]:
    f = open(fname[0], 'r')
    with f:
        data = f.read()
        self.textEdit.setText(data)       

讀取了選擇的文件并將文件內(nèi)容顯示到了TextEdit控件旁瘫。

資源獲取方法

1.關(guān)注公眾號[AI實驗樓]
2.在公眾號回復(fù)關(guān)鍵詞[PyQt5]獲取資料提取碼

歡迎訪問我的網(wǎng)站

BruceOu的嗶哩嗶哩
BruceOu的主頁
BruceOu的博客
BruceOu的CSDN博客
BruceOu的簡書
BruceOu的知乎

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠况,一起剝皮案震驚了整個濱河市售滤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌完箩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阻逮,死亡現(xiàn)場離奇詭異叔扼,居然都是意外死亡瓜富,警方通過查閱死者的電腦和手機降盹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來价捧,“玉大人结蟋,你說我怎么就攤上這事渔彰。” “怎么了胳岂?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵编整,是天一觀的道長。 經(jīng)常有香客問我乳丰,道長掌测,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任产园,我火速辦了婚禮汞斧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘什燕。我一直安慰自己粘勒,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布屎即。 她就那樣靜靜地躺著庙睡,像睡著了一般事富。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乘陪,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天统台,我揣著相機與錄音,去河邊找鬼啡邑。 笑死贱勃,一個胖子當著我的面吹牛贵扰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贵涵,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼拴还,長吁一口氣:“原來是場噩夢啊……” “哼端盆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弓摘,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎璧针,沒想到半個月后申屹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡忌栅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年瑞驱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤侍。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砰盐,到底是詐尸還是另有隱情岩梳,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布池摧,位于F島的核電站膘魄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灿渴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望误续。 院中可真熱鬧诞帐,春花似錦、人聲如沸慧起。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汗销。三九已至李皇,卻和暖如春掉房,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背富寿。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人银萍。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓶您,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 對話框 對話框是一個現(xiàn)代GUI應(yīng)用不可或缺的一部分。對話是兩個人之間的交流呀袱,對話框就是人與電腦之間的對話贸毕。對話框用...
    派派森森閱讀 1,831評論 0 0
  • 14 對話框類控件 《PyQt5快速開發(fā)與實戰(zhàn)》學習筆記明棍。 對話框是一個現(xiàn)代 GUI 應(yīng)用不可或缺的一部分歌豺。對話是...
    水之心閱讀 628評論 0 0
  • 對話框窗口或?qū)υ捒蚴谴蠖鄶?shù)主流GUI應(yīng)用不可缺少的部分痕惋。對話是兩個或更多人之間的會話值戳。在計算機應(yīng)用中,對話框是一個...
    交易狗二哈閱讀 2,089評論 0 2
  • PyQt5是一種高級的語言掰派,下面只有幾行代碼就能顯示一個小窗口。底層已經(jīng)實現(xiàn)了窗口的基本功能抖锥。 2.1入門實例 運...
    BruceOu閱讀 464評論 0 1
  • 對話框是一個現(xiàn)代GUI應(yīng)用不可或缺的一部分亿眠。對話是兩個人之間的交流,對話框就是人與電腦之間的對話磅废。對話框用來輸入數(shù)...
    徐凱_xp閱讀 222評論 0 0