国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:123日期:2022-06-24 11:21:17
方式一:槽函數中創建子窗口對象,賦值到普通變量

在主窗口添加按鈕,并把按鈕信號關聯槽,在槽函數中創建子窗口對象賦值到普通變量,并調用其 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_())

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

方式二:槽函數中創建子窗口對象,賦值為對象屬性

在主窗口添加按鈕,并把按鈕信號關聯槽,在槽函數中創建子窗口對象并賦值為對象屬性,并調用其 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_())

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

方式三:在主窗口__init__方法中創建子窗

在主窗口__init__方法中創建子窗口對象并賦值為對象屬性,添加按鈕,并把按鈕信號關聯槽,在槽函數中調用子窗口對象的 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_())

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

方式四: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_())

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

結論:

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

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

show() ------ modeless dialog

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

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

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲 欧美 日韩 在线 中文字幕 | 国产精品午夜波多野结衣性色 | 全部免费的毛片在线看美国 | 久揄揄鲁一二三四区高清在线 | 中国嫩模一级毛片 | 91精品国产爱久久久久久 | 久久国产精品久久 | 8888奇米四色在线 | 上海一级毛片 | 男人天堂手机在线 | 久久精品免费观看国产软件 | 91成年人免费视频 | 欧美精品亚洲人成在线观看 | 久久一日本道色综合久久m 久久伊人成人网 | 深夜福利爽爽爽动态图 | 日本在线免费视频 | 免费一级毛片在线播放不收费 | 91亚洲精品久久91综合 | 久久精品a | 免费黄网在线观看 | 91探花福利精品国产自产在线 | 91欧美激情一区二区三区成人 | 国产精品自拍在线 | 亚洲女视频| 姐姐真漂亮在线视频中文版 | 欧美视频一级 | 日韩专区亚洲国产精品 | 免费看欧美一级特黄a大片一 | 日产国产精品久久久久久 | 国产精品久久久久久久久福利 | 国产免费久久精品99re丫y | 久久免费视频99 | 精品亚洲一区二区三区 | 国产精品久久久精品三级 | 青草福利在线 | 欧美日韩视频精品一区二区 | 国产日韩欧美在线一二三四 | 末满18以下勿进色禁网站 | 精品成人免费视频 | 在线观看亚洲精品专区 | 国产成人久久精品麻豆二区 |