【问题标题】:how to catch close,minimize and other events in this program(pyqt)?如何在这个程序(pyqt)中捕捉关闭、最小化和其他事件?
【发布时间】:2013-11-12 07:49:39
【问题描述】:

朋友们,

这里的问题是我想捕获 QTabWidget 的最小化和关闭事件(默认情况下,这个小部件没有任何名为 close 或最小化的插槽)来隐藏小部件。所以用户可以退出应用程序的唯一方法是通过单击托盘图标菜单中的退出..

from PyQt4 import QtCore, QtGui
import sys

class Ui_TabWidget(object):
    def setupUi(self, TabWidget):
        TabWidget.setObjectName("TabWidget")
        TabWidget.resize(400, 300)
        self.tab = QtGui.QWidget()
        self.tab.setObjectName("tab")
        TabWidget.addTab(self.tab, "")
        self.tab1 = QtGui.QWidget()
        self.tab1.setObjectName("tab1")
        TabWidget.addTab(self.tab1, "")

        self.retranslateUi(TabWidget)
        QtCore.QMetaObject.connectSlotsByName(TabWidget)

    def retranslateUi(self, TabWidget):
        TabWidget.setWindowTitle(QtGui.QApplication.translate("TabWidget", "TabWidget", None, QtGui.QApplication.UnicodeUTF8))
        TabWidget.setTabText(TabWidget.indexOf(self.tab), QtGui.QApplication.translate("TabWidget", "Tab 1", None, QtGui.QApplication.UnicodeUTF8))
        TabWidget.setTabText(TabWidget.indexOf(self.tab1), QtGui.QApplication.translate("TabWidget", "Tab 2", None, QtGui.QApplication.UnicodeUTF8))

class Trayicon(QtGui.QSystemTrayIcon):
    def __init__(self,parent=None):
        QtGui.QSystemTrayIcon.__init__(self,parent)
        self.setIcon(QtGui.QIcon("icons/blockattack32.xpm"))
        self.show()

        self.menu=QtGui.QMenu()

        preference=self.menu.addAction("Preferences")
        exit=self.menu.addAction("Exit")

        self.setContextMenu(self.menu)

        self.TabWidget = QtGui.QTabWidget()
        ui = Ui_TabWidget()
        ui.setupUi(self.TabWidget)

        self.connect(exit,QtCore.SIGNAL('triggered()'),self.menuExit)

        self.connect(preference,QtCore.SIGNAL('triggered()'),self.showWidget)


    def menuExit(self):
        app.exit()

    def showWidget(self):
        self.TabWidget.show()

app = QtGui.QApplication(sys.argv)
cd=Trayicon()
cd.show()
sys.exit(app.exec_())

您的帮助将不胜感激!!!!!!!如果可能的话,你能告诉我任何像这样教我在 Qt 中进行二级编程的教程吗?

【问题讨论】:

  • 我不知道我不能免于回答这个问题!

标签: python pyqt


【解决方案1】:

我不确定你想要实现什么。

您想使用该类的一些公共方法隐藏选项卡小部件吗?如果是这样,您可以简单地调用 close() 方法。

如果您的要求是您不想在应用程序运行时关闭选项卡小部件,那么以下适用 ---

你写道: “这里的问题是我想捕捉 QTabWidget 的最小化和关闭事件(默认情况下,这个小部件没有任何名为关闭或最小化的插槽)来隐藏小部件 .. "

QTabWidget 继承 QWidget,QWidget 实现 'close()' 。

所以,在继承QTabWidget的类中,可以重新实现方法“closeEvent()”来捕获关闭事件

在你的代码中你可以试试这个:

class MyTabWidget(QtGui.QtabWidget):
    def closeEvent(self):
        # Let the Exit button handle tab closing
        print "close event captured. Do nothing."

        # Alternatively, if you want to EXIT the application when the close event  
        #occurs,  you can implement that code  here!


# In the TrayIcon class

self.TabWidget = MyTabWidget() 

上面的代码将确保小部件只有在系统托盘中的退出按钮被点击时才会关闭(并且标签小部件的“X”按钮不会关闭/隐藏该小部件。)

【讨论】:

    【解决方案2】:

    您可以实现自己的事件过滤器。

    class custom(QWidget):
        def __init__(self):
            super(custom, self).__init__()
            self.installEventFilter(self)
    
        def eventFilter(self, qobject, qevent):
            qtype = qevent.type()
            if qtype == QEvent.Close or qtype == QEvent.WindowStateChange:
                .. hide logic
                return True
            # parents event handler for all other events
            return super(custom,self).eventFilter(qobject, qevent)
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多