栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 面试经验 > 面试问答

Python:PyQt弹出窗口

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python:PyQt弹出窗口

一个使您抓狂的常见错误是忘记将创建的弹出窗口的句柄存储在将保持活动状态的python变量中(例如,存储在主窗口的数据成员中)。

以下是一个简单的程序,该程序创建一个带有按钮的主窗口,按此按钮可打开一个弹出窗口

#!/usr/bin/env python#-*- coding: utf-8 -*-import sysfrom PyQt4.Qt import *class MyPopup(QWidget):    def __init__(self):        QWidget.__init__(self)    def paintEvent(self, e):        dc = QPainter(self)        dc.drawLine(0, 0, 100, 100)        dc.drawLine(100, 0, 0, 100)class MainWindow(QMainWindow):    def __init__(self, *args):        QMainWindow.__init__(self, *args)        self.cw = QWidget(self)        self.setCentralWidget(self.cw)        self.btn1 = QPushButton("Click me", self.cw)        self.btn1.setGeometry(QRect(0, 0, 100, 30))        self.connect(self.btn1, SIGNAL("clicked()"), self.doit)        self.w = None    def doit(self):        print "Opening a new popup window..."        self.w = MyPopup()        self.w.setGeometry(QRect(100, 100, 400, 200))        self.w.show()class App(QApplication):    def __init__(self, *args):        QApplication.__init__(self, *args)        self.main = MainWindow()        self.connect(self, SIGNAL("lastWindowClosed()"), self.byebye )        self.main.show()    def byebye( self ):        self.exit(0)def main(args):    global app    app = App(args)    app.exec_()if __name__ == "__main__":    main(sys.argv)

我认为对于Python用户来说可能是令人惊讶的,可能是您面临的问题是,如果您没有在主目录中存储对新窗口小部件的引用,例如通过使用

w =MyPopup(...)
而不是
self.w = MyPopup(...)
窗口就不会出现(实际上是它创建后立即被销毁)。

原因是当局部变量

w
超出范围时,因为没有人明确引用该窗口小部件,因此该窗口小部件被删除。可以清楚地看到这一点,因为如果再次按下该按钮,您将看到第二个弹出窗口出现时第一个弹出窗口被关闭。

这也意味着,如果您需要创建多个弹出窗口,则必须将其放入python列表中,并且一旦用户关闭了弹出窗口,便应将其从此列表中删除。该示例中的等效项可以更改为

self.w= []
in构造函数,然后执行
self.w.append(MyPopup(...))
。这样做将允许您打开几个弹出窗口。



转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/640025.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号