我試圖在捕獲最小化事件時繼承QMainWindows並調用self.hide()。當我按下最小化按鈕時,它被最小化爲任務欄,當我在任務欄上按下它以使它再次出現在屏幕上時,我發現它不可見。只有QMainWindows的內容被隱藏,框架仍然存在。PyQt4:self.hide()只隱藏內容
self.hide()應該表現什麼?
我想盡量減少到系統托盤,但許多我從這個question發現的答案沒有奏效。
我試圖在捕獲最小化事件時繼承QMainWindows並調用self.hide()。當我按下最小化按鈕時,它被最小化爲任務欄,當我在任務欄上按下它以使它再次出現在屏幕上時,我發現它不可見。只有QMainWindows的內容被隱藏,框架仍然存在。PyQt4:self.hide()只隱藏內容
self.hide()應該表現什麼?
我想盡量減少到系統托盤,但許多我從這個question發現的答案沒有奏效。
我試圖子類QMainWindows並撥打電話到self.hide() 時,儘量減少事件被抓住了。當我按下最小化 按鈕時,它最小化爲任務欄,並且當我在 任務欄上按下它以使其再次出現在屏幕上時,我發現它不是 不可見。只有QMainWindows的內容被隱藏,並且框架 仍然存在。
self.hide()應該表現什麼?
我相信這是正確的行爲。當你做self.hide()
時,你並沒有隱藏窗口(正如鏈接問題的接受答案中所建議的),而是隱藏其中的小部件。這就是爲什麼當你恢復時,你會看到框架,而不是小部件。
在你的鏈接的問題看到其他答案,並嘗試它們 - 有代碼示例。
UPDATE:
這裏是一個工作例如從你的鏈接的問題(在KDE測試使用Python 2.7):
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QDialog, QApplication, QPushButton, QLineEdit, QFormLayout,QSystemTrayIcon
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.icon = QSystemTrayIcon()
r = self.icon.isSystemTrayAvailable()
print r
self.icon.setIcon(QtGui.QIcon(':/trolltech/styles/commonstyle/images/networkdrive-16.png'))
self.icon.show()
#self.icon.setVisible(True)
self.setGeometry(300, 300, 250, 150)
self.setWindowIcon(QtGui.QIcon(':/trolltech/styles/commonstyle/images/networkdrive-16.png'))
self.setWindowTitle('Message box')
self.show()
self.icon.activated.connect(self.activate)
self.show()
def closeEvent(self, event):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?\n(choose No to minimize to tray, and double click to restore)",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
self.icon.show()
self.hide()
event.ignore()
def activate(self, reason):
print reason
if reason == 2:
self.show()
def __icon_activated(self, reason):
if reason == QtGui.QSystemTrayIcon.DoubleClick:
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
在相關問題中,接受的答案建議調用self.hide()以「隱藏到托盤」,但只將窗口移動到任務欄,因此我不明白爲什麼這種方法有效。 – lamwaiman1988 2012-07-29 05:45:05
@ gunbuster363,看到我添加的代碼 – warvariuc 2012-07-29 08:44:21
你可以把一些代碼嗎? – Jeff 2012-07-26 16:12:59