Python 在QSystemTrayIcon中实现弹出式映射
我想实现一个弹出窗口的行为,就像Windows10中的默认音量控制器一样。点击图标,窗口打开或关闭;如果窗口打开,单击窗口外部将关闭窗口。我如何实现这一点 之前,我发现小部件可以覆盖按下和释放鼠标键的方法,但在这里没有找到,或者搜索不好。请帮帮我Python 在QSystemTrayIcon中实现弹出式映射,python,pyqt,pyqt5,qsystemtrayicon,Python,Pyqt,Pyqt5,Qsystemtrayicon,我想实现一个弹出窗口的行为,就像Windows10中的默认音量控制器一样。点击图标,窗口打开或关闭;如果窗口打开,单击窗口外部将关闭窗口。我如何实现这一点 之前,我发现小部件可以覆盖按下和释放鼠标键的方法,但在这里没有找到,或者搜索不好。请帮帮我 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, \ QWidget,
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, \
QWidget, QSystemTrayIcon, QStyle, qApp
import PyQt5.QtCore
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setMinimumSize(PyQt5.QtCore.QSize(600, 130))
self.setMaximumSize(PyQt5.QtCore.QSize(600, 130))
self.setWindowFlags(PyQt5.QtCore.Qt.Popup)
screen_geometry = QApplication.desktop().availableGeometry()
screen_size = (screen_geometry.width(), screen_geometry.height())
win_size = (self.frameSize().width(), self.frameSize().height())
x = screen_size[0] - win_size[0]
y = screen_size[1] - win_size[1]
self.move(x, y)
self.setWindowOpacity(0.85)
self.setWindowTitle("System Tray Application")
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
grid_layout = QGridLayout(central_widget)
grid_layout.addWidget(QLabel("Application, which can minimize to tray",
self), 0, 0)
self.tray_icon = QSystemTrayIcon(self)
self.tray_icon.setIcon(self.
style().standardIcon(QStyle.SP_ComputerIcon))
self.tray_icon.activated.connect(self.trigger)
self.tray_icon.show()
self.setGeometry(500, 570, 600, 130)
self.fl = False
def trigger(self, reason):
if reason == QSystemTrayIcon.MiddleClick:
qApp.quit()
elif reason == QSystemTrayIcon.Trigger:
if not self.fl:
self.show()
else:
self.hide()
self.fl = not self.fl
elif reason == 1:
self.fl = False
# def mouseReleaseEvent(self, event):
# self.hide()
# self.fl = False
if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec())
如果要切换可见性,则必须使用
setVisible()
和isVisible()
方法:
导入系统
从PyQt5.QtWidgets导入(
QApplication,
QGridLayout,
QLabel,
QMainWindow,
QStyle,
QSystemTrayIcon,
QWidget,
)
从PyQt5.QtCore导入Qt,QSize
类主窗口(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
自设置固定大小(600130)
self.setWindowFlag(Qt.Popup)
self.setWindowOpacity(0.85)
self.setWindowTitle(“系统托盘应用程序”)
central_widget=QWidget()
self.setCentralWidget(中心窗口小部件)
grid_layout=QGridLayout(中心_小部件)
grid_layout.addWidget(QLabel(“应用程序,可以最小化到托盘”),0,0)
self.tray_图标=QSystemTrayIcon(self)
self.tray_icon.setIcon(self.style().standardIcon(QStyle.SP_ComputerIcon))
self.tray_图标。已激活。连接(self.trigger)
self.tray_icon.show()
自置几何(
QStyle.alignedRect(
Qt.LeftToRight,
Qt.AlignBottom | Qt.AlignRight,
self.window().size(),
QApplication.desktop().availableGeometry(),
)
)
def触发器(自身、原因):
如果原因==QSystemTrayIcon.MiddleClick:
QApplication.quit()
elif原因==QSystemTrayIcon.Trigger:
self.setVisible(非self.isVisible())
如果名称=“\uuuuu main\uuuuuuuu”:
app=QApplication(sys.argv)
mw=主窗口()
mw.show()
sys.exit(app.exec())