PyQt5筆記之彈出窗口大全
本文實(shí)現(xiàn)了PyQt5個(gè)各種彈出窗口:輸入框、消息框、文件對(duì)話框、顏色對(duì)話框、字體對(duì)話框、自定義對(duì)話框
其中,為了實(shí)現(xiàn)自定義對(duì)話框的返回值,使用了信號(hào)/槽
本文基于 windows 7 + python 3.4
效果圖:
取得彈出窗口的返回值
全部代碼:
from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt, pyqtSignal, QTimer class MyWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle('PyQt5 彈出窗口(框)大全') self.resize(400, 300) # 全局布局(注意參數(shù) self) wl = QVBoxLayout(self) # 局部布局 h1 = QHBoxLayout() # 輸入框 h2 = QHBoxLayout() # 消息窗口 h3 = QHBoxLayout() # 文件(夾)打開(kāi),保存 h4 = QHBoxLayout() # 顏色、字體、自定義 btn11 = QPushButton('輸入:整數(shù)') btn12 = QPushButton('輸入:小數(shù)') btn13 = QPushButton('輸入:文本') btn14 = QPushButton('輸入:多文') btn15 = QPushButton('輸入:選項(xiàng)') btn21 = QPushButton('消息:信息') btn22 = QPushButton('消息:?jiǎn)柎?) btn23 = QPushButton('消息:警告') btn24 = QPushButton('消息:危險(xiǎn)') btn25 = QPushButton('消息:關(guān)于') btn31 = QPushButton('文件:文件夾') btn32 = QPushButton('文件:?jiǎn)挝募?) btn33 = QPushButton('文件:多文件') btn34 = QPushButton('文件:保存') btn35 = QPushButton('文件:另存為') btn41 = QPushButton('顏色') btn42 = QPushButton('字體') btn43 = QPushButton('自定義') for btn in (btn11, btn12, btn13, btn14, btn15): h1.addWidget(btn) for btn in (btn21, btn22, btn23, btn24, btn25): h2.addWidget(btn) for btn in (btn31, btn32, btn33, btn34, btn35): h3.addWidget(btn) for btn in (btn41, btn42, btn43): h4.addWidget(btn) btn11.clicked.connect(self.do_btn11) # 輸入:整數(shù) btn12.clicked.connect(self.do_btn12) # 輸入:小數(shù) btn13.clicked.connect(self.do_btn13) # 輸入:文本 btn14.clicked.connect(self.do_btn14) # 輸入:多文 btn15.clicked.connect(self.do_btn15) # 輸入:選項(xiàng) btn21.clicked.connect(self.do_btn21) # 消息:信息 btn22.clicked.connect(self.do_btn22) # 消息:?jiǎn)柎? btn23.clicked.connect(self.do_btn23) # 消息:警告 btn24.clicked.connect(self.do_btn24) # 消息:危險(xiǎn) btn25.clicked.connect(self.do_btn25) # 消息:關(guān)于 btn31.clicked.connect(self.do_btn31) # 文件:文件夾 btn32.clicked.connect(self.do_btn32) # 文件:?jiǎn)挝募? btn33.clicked.connect(self.do_btn33) # 文件:多文件 btn34.clicked.connect(self.do_btn34) # 文件:保存 btn35.clicked.connect(self.do_btn35) # 文件:另存為 btn41.clicked.connect(self.do_btn41) # 顏色 btn42.clicked.connect(self.do_btn42) # 字體 btn43.clicked.connect(self.do_btn43) # 自定義 # 加到全局布局 wl.addLayout(h1) wl.addLayout(h2) wl.addLayout(h3) wl.addLayout(h4) self.window2 = MyWindow2() # 自定義窗口 self.window2.before_close_signal.connect(self.echo) # 接收自定義窗口關(guān)閉時(shí)發(fā)送過(guò)來(lái)的信號(hào),交給 echo 函數(shù)顯示 def echo(self, value): '''顯示對(duì)話框返回值''' QMessageBox.information(self, "返回值", "得到:{}\n\ntype: {}".format(value, type(value)), QMessageBox.Yes | QMessageBox.No) #pass # ===================================================================== def do_btn11(self, event): # 輸入:整數(shù) #后面四個(gè)數(shù)字的作用依次是 初始值 最小值 最大值 步幅 value, ok = QInputDialog.getInt(self, "輸入框標(biāo)題", "這是提示信息\n\n請(qǐng)輸入整數(shù):", 37, -10000, 10000, 2) #self.echo(value) def do_btn12(self, event): # 輸入:小數(shù) #后面四個(gè)數(shù)字的作用依次是 初始值 最小值 最大值 小數(shù)點(diǎn)后位數(shù) value, ok = QInputDialog.getDouble(self, "輸入框標(biāo)題", "這是提示信息\n\n請(qǐng)輸入整數(shù):", 37.56, -10000, 10000, 2) self.echo(value) def do_btn13(self, event): # 輸入:文本 #第三個(gè)參數(shù)表示顯示類型,可選,有正常(QLineEdit.Normal)、密碼( QLineEdit. Password)、不顯示( QLineEdit. NoEcho)三種情況 value, ok = QInputDialog.getText(self, "輸入框標(biāo)題", "這是提示信息\n\n請(qǐng)輸入文本:", QLineEdit.Normal, "這是默認(rèn)值") self.echo(value) def do_btn14(self, event): # 輸入:多文 value, ok = QInputDialog.getMultiLineText(self, "輸入框標(biāo)題", "這是提示信息\n\n請(qǐng)輸入地址:", "默認(rèn)的\n我的地址是\n中國(guó)廣東廣州番禺") self.echo(value) def do_btn15(self, event): # 輸入:選項(xiàng) #1為默認(rèn)選中選項(xiàng)目,True/False 列表框是否可編輯。 items = ["Spring", "Summer", "Fall", "Winter"] value, ok = QInputDialog.getItem(self, "輸入框標(biāo)題", "這是提示信息\n\n請(qǐng)選擇季節(jié):", items, 1, True) self.echo(value) # ===================================================================== def do_btn21(self, event): # 消息:信息 reply = QMessageBox.information(self, "消息框標(biāo)題", "這是一條消息。", QMessageBox.Yes | QMessageBox.No) self.echo(reply) def do_btn22(self, event): # 消息:?jiǎn)柎? reply = QMessageBox.question(self, "消息框標(biāo)題", "這是一條問(wèn)答嗎?", QMessageBox.Yes | QMessageBox.No) self.echo(reply) def do_btn23(self, event): # 消息:警告 reply = QMessageBox.warning(self, "消息框標(biāo)題", "這是一條警告!", QMessageBox.Yes | QMessageBox.No) self.echo(reply) def do_btn24(self, event): # 消息:危險(xiǎn) reply = QMessageBox.ctitical(self, "消息框標(biāo)題", "危險(xiǎn)!程序即將強(qiáng)制退出?。?!\n\n這個(gè)按鈕再也點(diǎn)不開(kāi)。", QMessageBox.Yes | QMessageBox.No) self.echo(reply) def do_btn25(self, event): # 消息:關(guān)于 reply = QMessageBox.about(self, "消息框標(biāo)題", "這是關(guān)于軟件的說(shuō)明。。。", QMessageBox.Yes | QMessageBox.No) self.echo(reply) # ===================================================================== def do_btn31(self, event): # 文件:文件夾 dir = QFileDialog.getExistingDirectory(self, "選取文件夾", "C:/") # 起始路徑 self.echo(dir) def do_btn32(self, event): # 文件:?jiǎn)挝募? file_, filetype = QFileDialog.getOpenFileName(self, "選取文件", "C:/", "All Files (*);;Text Files (*.txt)") #設(shè)置文件擴(kuò)展名過(guò)濾,注意用雙分號(hào)間隔 self.echo(file_) def do_btn33(self, event): # 文件:多文件 files, ok = QFileDialog.getOpenFileNames(self, "多文件選擇", "C:/", "All Files (*);;Text Files (*.txt)") self.echo(files) def do_btn34(self, event): # 文件:保存 file_, ok = QFileDialog.getSaveFileName(self, "文件保存", "C:/", "All Files (*);;Text Files (*.txt)") self.echo(file_) def do_btn35(self, event): # 文件:另存為 file_, ok = QFileDialog.getSaveFileName(self, "文件另存為", "C:/", "All Files (*);;Text Files (*.txt)") self.echo(file_) # ===================================================================== def do_btn41(self, event): # 顏色 color = QColorDialog.getColor(Qt.blue, self, "Select Color") self.echo(color) def do_btn42(self, event): # 字體 font, ok = QFontDialog.getFont() self.echo(font) def do_btn43(self, event): # 自定義 self.window2.show() class MyWindow2(QWidget): '''自定義窗口''' # 知識(shí)點(diǎn): # 1.為了得到返回值用到了自定義的信號(hào)/槽 # 2.為了顯示動(dòng)態(tài)數(shù)字,使用了計(jì)時(shí)器 before_close_signal = pyqtSignal(int) # 自定義信號(hào)(int類型) def __init__(self): super().__init__() self.sec = 0 self.setWindowTitle('自定義窗口') self.resize(200,150) self.lcd = QLCDNumber(18, self) btn1 = QPushButton(self, text="測(cè)試") btn2 = QPushButton(self, text="關(guān)閉") layout = QVBoxLayout(self) layout.addWidget(self.lcd) layout.addWidget(btn1) layout.addWidget(btn2) self.timer = QTimer() self.timer.timeout.connect(self.update) # 每次計(jì)時(shí)結(jié)束,觸發(fā)update btn1.clicked.connect(self.startTimer) btn2.clicked.connect(self.stopTimer) # 去到關(guān)閉前的處理 def update(self): self.sec += 1 self.lcd.display(self.sec) # LED顯示數(shù)字+1 def startTimer(self): self.timer.start(1000) # 計(jì)時(shí)器每秒計(jì)數(shù) def stopTimer(self): self.timer.stop() self.sec = 0 self.before_close_signal.emit(self.lcd.value()) # 發(fā)送信號(hào),帶參數(shù) 888 self.close() # 然后窗口關(guān)閉 # 默認(rèn)關(guān)閉事件 def closeEvent(self, e): self.stopTimer() if __name__=="__main__": import sys app = QApplication(sys.argv) win = MyWindow() win.show() sys.exit(app.exec_())
以上這篇PyQt5筆記之彈出窗口大全就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python日期時(shí)間對(duì)象轉(zhuǎn)換為字符串的實(shí)例
今天小編就為大家分享一篇Python日期時(shí)間對(duì)象轉(zhuǎn)換為字符串的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python實(shí)現(xiàn)TCP協(xié)議下的端口映射功能的腳本程序示例
端口映射一個(gè)最基本的運(yùn)作形態(tài)就是通過(guò)一個(gè)中間端口將一個(gè)端口發(fā)送的數(shù)據(jù)全部轉(zhuǎn)給另一個(gè)端口,well,這里我們就來(lái)看一下Python實(shí)現(xiàn)TCP協(xié)議下的端口映射功能的腳本程序示例2016-06-06Python中staticmethod和classmethod的作用與區(qū)別
今天小編就為大家分享一篇關(guān)于Python中staticmethod和classmethod的作用與區(qū)別,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10pytorch之torchvision.transforms圖像變換實(shí)例
今天小編就為大家分享一篇pytorch之torchvision.transforms圖像變換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12Python?selenium?get_cookies獲取cookie不全的解決方案
之前使用爬蟲(chóng)時(shí)最讓我頭疼的就是cookie失效的問(wèn)題了,下面這篇文章主要給大家介紹了關(guān)于Python?selenium?get_cookies獲取cookie不全的解決方案,需要的朋友可以參考下2022-10-10Python爬取微信小程序Charles實(shí)現(xiàn)過(guò)程圖解
這篇文章主要介紹了Python爬取微信小程序Charles實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09小學(xué)生也能看懂的python語(yǔ)法之循環(huán)語(yǔ)句精解
這篇文章主要介紹了詳解Python中的條件,循環(huán)語(yǔ)句,包括while循環(huán)for循環(huán),循環(huán)語(yǔ)句是學(xué)習(xí)各個(gè)編程語(yǔ)言的最基本的基礎(chǔ)知識(shí),需要的朋友可以參考下2021-09-09