• 2900阅读
  • 2回复

python qt4 消息框显示问题 [复制链接]

上一主题 下一主题
离线lason123
 

只看楼主 倒序阅读 楼主  发表于: 2017-05-03
坛里高手们,请教一个python2.7  qt4消息框问题,以下代码的目的是为了显示一个消息框,运行下面的代码,能够正常显示消息框,
但是如果将绿色的两句改为封装成一个msg函数在主函数中被调用,发现消息框闪了一下就没了,请问为什么不行,被调用的msg函数应该怎么改,才可行,谢谢

#!/usr/bin/python
# messagebox.py
import sys
from PyQt4 import QtGui
import time

class MessageBox2(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('message box')
        
    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(self, 'Message',
         "Are you sure to quit?", QtGui.QMessageBox.Yes,
         QtGui.QMessageBox.No)
        
        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()  

def msg():

    qb= MessageBox2()
    qb.show()


if __name__=='__main__':
    
    app = QtGui.QApplication(sys.argv)
    qb= MessageBox2()
    qb.show()

    #msg()
    sys.exit(app.exec_())
---------------------------------------------------------------------------------------------------
改成
if __name__=='__main__':
    
    app = QtGui.QApplication(sys.argv)
    #qb= MessageBox2()
    #qb.show()

    msg()
    sys.exit(app.exec_())
离线bilyecit

只看该作者 1楼 发表于: 2017-06-01
def msg():
    qb= MessageBox2()
    qb.show()

msg()函数里的qb是局部变量, msg函数返回后qb对象被销毁了。

如果一定要这样调用,可以把qb生命为全局变量:
def msg():
    global qb
    qb = MessageBox2()
    qb.show()

这样就没问题了。
离线lason123

只看该作者 2楼 发表于: 2017-07-08
谢谢楼上的解答,你的答案是正确的
快速回复
限100 字节
 
上一个 下一个