我正在尝试最小化托盘的窗口,但似乎它拒绝隐藏任务栏。我花了一点时间将问题代码归结为此。它不是很好,所以我想知道我是否需要其他东西来隐藏我的应用程序到Windows 7中的托盘。
import sys, os
from PyQt4 import uic
from PyQt4.QtGui import QMainWindow, QApplication
class MyClass(QMainWindow):
def __init__(self, parent = None):
QMainWindow.__init__(self, parent)
self.ui = uic.loadUi(os.path.join("gui", "timeTrackerClientGUI.ui"), self)
def hideEvent(self, event):
self.hide()
def showEvent(self, event):
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
wnd = MyClass()
wnd.show()
app.exec_()
似乎应用程序图标确实隐藏了但是又弹出了另一个图标,如果我多次单击任务栏图标,我可以让这两个图标闪烁,在第一个隐藏之前看起来有点像这样一个分秒:
答案 0 :(得分:3)
这需要一个非常难看的黑客才能让它工作但是如果有人感兴趣,这里是最终代码,ph是我的平台特定模块,你可以使用platform.name或类似函数:
def hideEvent(self, event):
self.hide()
if ph.is_windows():
self.hidden = True
self.setWindowFlags(Qt.ToolTip)
def showEvent(self, event):
if ph.is_windows() and self.hidden:
self.setWindowFlags(Qt.Window)
self.hidden = False
self.show()
答案 1 :(得分:1)
在showEvent()/ hideEvent()中调用show / hide没有意义 - 这些事件是show()/ hide()调用(等)的结果,而不是触发器。如果要通过单击托盘图标来切换窗口可见性,请在窗口小部件上尝试setVisible(!isVisible()),如果要在用户单击窗口关闭按钮时隐藏窗口,请尝试重新实现closeEvent():
MyMainWindow::closeEvent( QCloseEvent* e ) {
hide();
e->accept();
}
在Python中,那是
def closeEvent(self, event):
self.hide()
event.accept()