电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

瀏覽:138日期:2022-06-24 11:21:17
方式一:槽函數(shù)中創(chuàng)建子窗口對象,賦值到普通變量

在主窗口添加按鈕,并把按鈕信號關聯(lián)槽,在槽函數(shù)中創(chuàng)建子窗口對象賦值到普通變量,并調(diào)用其 show 方法。

from PyQt5.QtWidgets import *import sys class Main(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('主窗口') button = QPushButton('彈出子窗', self) button.clicked.connect(self.show_child) def show_child(self): child_window = Child() child_window.show() class Child(QWidget): def __init__(self): super().__init__() self.setWindowTitle('我是子窗口啊') # 運行主窗口if __name__ == '__main__': app = QApplication(sys.argv) window = Main() window.show() sys.exit(app.exec_())

運行結(jié)果: 該段代碼運行后,點擊主窗口中的按鈕,子窗口一閃而過。

方式二:槽函數(shù)中創(chuàng)建子窗口對象,賦值為對象屬性

在主窗口添加按鈕,并把按鈕信號關聯(lián)槽,在槽函數(shù)中創(chuàng)建子窗口對象并賦值為對象屬性,并調(diào)用其 show 方法。

from PyQt5.QtWidgets import *import sys class Main(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('主窗口') button = QPushButton('彈出子窗', self) button.clicked.connect(self.show_child) def show_child(self): self.child_window = Child() self.child_window.show() class Child(QWidget): def __init__(self): super().__init__() self.setWindowTitle('我是子窗口啊') # 運行主窗口if __name__ == '__main__': app = QApplication(sys.argv) window = Main() window.show() sys.exit(app.exec_())

運行結(jié)果: 該段代碼運行后,點擊主窗口中的按鈕,子窗口正常打開,重復點擊按鈕,子窗口重復彈出。

方式三:在主窗口__init__方法中創(chuàng)建子窗

在主窗口__init__方法中創(chuàng)建子窗口對象并賦值為對象屬性,添加按鈕,并把按鈕信號關聯(lián)槽,在槽函數(shù)中調(diào)用子窗口對象的 show 方法。

from PyQt5.QtWidgets import *import sys class Main(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('主窗口') button = QPushButton('彈出子窗', self) button.clicked.connect(self.show_child) self.child_window = Child() def show_child(self): self.child_window.show() class Child(QWidget): def __init__(self): super().__init__() self.setWindowTitle('我是子窗口啊') # 運行主窗口if __name__ == '__main__': app = QApplication(sys.argv) window = Main() window.show() sys.exit(app.exec_())

運行結(jié)果: 重復點擊按鈕,子窗口不重復彈出。

方式四:exec()方法

把例1的show()方法改為exec()方法

from PyQt5.QtWidgets import *import sys class Main(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('主窗口') button = QPushButton('彈出子窗', self) button.clicked.connect(self.show_child) def show_child(self): child_window = Child() child_window.exec() class Child(QWidget): def __init__(self): super().__init__() self.setWindowTitle('我是子窗口啊') # 運行主窗口if __name__ == '__main__': app = QApplication(sys.argv) window = Main() window.show() sys.exit(app.exec_())

運行結(jié)果:子窗口順利彈出,且不能重新選擇父窗口

結(jié)論:

這里涉及到一個概念 模式對話框 與 非模式對話框 (modeless dialog | modal dialog)

模式對話框,就是在彈出窗口的時候,整個程序就被鎖定了,處于等待狀態(tài),直到對話框被關閉。這時往往是需要對話框的返回值進行下面的操作。如:確認窗口(選擇“是”或“否”)。非模式對話框,在調(diào)用彈出窗口之后,調(diào)用即刻返回,繼續(xù)下面的操作。這里只是一個調(diào)用指令的發(fā)出,不等待也不做任何處理。如:查找框。

show() ------ modeless dialog

exec() ------- modal dialog

方式一中 子窗口 通過 show() 方法顯示,為非模態(tài)窗口,它的實例為父窗口show_child()方法中的局部變量,當窗口顯示后,父窗口的show_child()方法繼續(xù)執(zhí)行,當方法運行完后,python的回收機制就把局部變量銷毀了,相當于子窗口實例被銷毀,故子窗口一閃而過; 方式二中 子窗口實例為 主窗口類的變量,當show_child()方法運行完后,主窗口對象依舊存在,子窗口實例也存在,故子窗口正常顯示,但是每一次運行槽函數(shù)都會重新創(chuàng)建子窗口對象; 方式三中 子窗口實例為 主窗口類的變量,當show_child()方法運行完后,主窗口對象依舊存在,子窗口實例也存在,故子窗口正常顯示,每一次show_child()函數(shù),重新調(diào)用子窗口對象show_child()方法,不會創(chuàng)建新窗口,且可隨意在父,子窗口間切換; 方式四中 子窗口 通過 exec() 方法顯示,為模態(tài)窗口,雖然他為父窗口show_child()方法中的局部變量,由于阻塞的機制,父窗口show_child()并沒有繼續(xù)執(zhí)行,故其不會像 例1 中 一閃而過,且不能在父,子窗口間切換;

到此這篇關于Python PyQt5中彈出子窗口解決子窗口一閃而過的問題的文章就介紹到這了,更多相關Python PyQt5彈出子窗口內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 恒温振荡混匀器-微孔板振荡器厂家-多管涡旋混匀器厂家-合肥艾本森(www.17world.net) | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 数字展示在线_数字展示行业门户网站 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 免费B2B信息推广发布平台 - 推发网 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 泰安办公家具-泰安派格办公用品有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? |