pyqt5教程(七)對話框

對話框窗口或?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)容會被讀取并在文本編輯框組件中顯示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裙顽,一起剝皮案震驚了整個濱河市付燥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愈犹,老刑警劉巖键科,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漩怎,居然都是意外死亡勋颖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門勋锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饭玲,“玉大人,你說我怎么就攤上這事怪得≡弁鳎” “怎么了卑硫?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚕断。 經(jīng)常有香客問我欢伏,道長,這世上最難降的妖魔是什么亿乳? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任硝拧,我火速辦了婚禮,結(jié)果婚禮上葛假,老公的妹妹穿的比我還像新娘障陶。我一直安慰自己,他們只是感情好聊训,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布抱究。 她就那樣靜靜地躺著,像睡著了一般带斑。 火紅的嫁衣襯著肌膚如雪鼓寺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天勋磕,我揣著相機(jī)與錄音妈候,去河邊找鬼。 笑死挂滓,一個胖子當(dāng)著我的面吹牛苦银,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赶站,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼幔虏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亲怠?” 一聲冷哼從身側(cè)響起所计,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎团秽,沒想到半個月后主胧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡习勤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年踪栋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片图毕。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡夷都,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出予颤,到底是詐尸還是另有隱情囤官,我是刑警寧澤冬阳,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站党饮,受9級特大地震影響肝陪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刑顺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一氯窍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹲堂,春花似錦狼讨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朽基,卻和暖如春鲫骗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踩晶。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枕磁,地道東北人渡蜻。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像计济,于是被迫代替她去往敵國和親茸苇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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