我有一个主要基于QSystemTrayIcon. 一切正常,右键单击任务栏图标有一个退出程序的选项。我想添加一个QMessageBox,然后选择“是”,退出程序;否则,什么也不做。
我对这一切都很熟悉,但它并没有发挥应有的作用,因此就有了这个问题。我创建了一个最小的示例来演示该问题:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class SystemTrayIcon(QtWidgets.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
self.menu = QtWidgets.QMenu(parent)
self.exit_action = self.menu.addAction("Exit")
self.setContextMenu(self.menu)
self.exit_action.triggered.connect(self.slot_exit)
self.msg_parent = QtWidgets.QWidget()
def slot_exit(self):
reply = QtWidgets.QMessageBox.question(self.msg_parent, "Confirm exit",
"Are you sure you want to exit Persistent Launcher?",
QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
# if reply == QtWidgets.QMessageBox.Yes:
# QtCore.QCoreApplication.exit(0)
def main():
app = QtWidgets.QApplication(sys.argv)
tray_icon = SystemTrayIcon(QtGui.QIcon("TheIcon.png"))
tray_icon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
现在您可以看到,在该slot_exit()函数中,无论我选择“是”还是“否”,程序都会退出(代码为 0,没有错误)。注释部分是我期望用于根据选择确定操作的部分。您能否帮我弄清楚为什么会发生这种行为以及仅在“是”时退出的正确方法是什么?
我使用的是 …
我的应用程序使用Windows开始菜单中的广告快捷方式启动.这意味着快捷方式不会直接链接到我的exe,尽管exe最终会运行.
我的问题是:当我右键单击Windows 7任务栏中的快捷方式并选择固定到任务栏,然后启动我的应用程序时,我最终在任务栏中有两个图标.(因此正在运行的应用程序不会重复使用现有的任务栏图标.)有谁知道如何解决这个问题?
不幸的是,使用广告而不是直接快捷方式的选择并不取决于我.
顺便说一句,还有另一种方法可以将程序固定到Windows 7中的任务栏:右键单击正在运行的应用程序的图标.如果我这样做,我不会得到重复的图标,所以我很确定问题是广告的快捷方式.
谢谢,艾米
我有一个winforms应用程序,我想显示一个图标,并在我的taksbar上的图标旁边显示图标,就像我的AV软件和音量控制一样.知道怎么做吗?
提前致谢.
我已经看到一些利用新任务栏功能在网络上弹出的Windows 7应用程序.但是,其中一些应用程序正在处理任务栏,如通知区域.没有前景窗口.所有交互都通过任务栏按钮完成(包括叠加,进度条,跳转列表等).
就个人而言,我更喜欢新的任务栏而不是通知区域,因为我能够使用更大的图标并为用户提供非常熟悉的用户界面和丰富的体验.但我也觉得像上面描述的那些应用程序应该保存在通知区域中.
您如何看待使用Windows 7任务栏作为"新通知区域"的应用程序?应该避免吗?
我做了一个快速的主题外观,但没有找到类似的东西.
我的查询是:如何在显示Windows任务栏时阻止子窗口出现?
所以,我正在写一个像应用程序一样的dock/taskbar.我想要做的很简单,显示正在运行的程序列表.
我找到了很多方法来枚举所有正在运行的进程,但经过几个小时的谷歌搜索,我找不到一种方法来确定哪些应该在任务栏中显示.
以Windows任务管理器为例.它有两个选项卡,一个标题为Applicationss,另一个标题为进程.进程包含所有系统进程,而程序以某种方式获取计算机上运行的"应用程序"列表.我希望能够访问应用程序的列表在我的计划,而不是进程列表中,这样在我的伪taksbar我不喜欢taskhost.exe,WINLOGON.EXE等显示的东西
理想情况下,我将能够获得任务栏中显示的确切程序列表.我的程序是在Python中,我有Windows API和WMI访问,但如果我必须为C函数编写python包装器,我会这样做.
据我所知,Windows Tasksbar API更适用于将menups或进度条添加到现有图标,我无法找到访问我正在寻找的信息的方法.我错了吗?
谢谢!
我有一些代码使用带有TB_GETBUTTON消息的User32.SendMessage从Windows TaskBar中获取TaskBar按钮及其文本,以检索TBBUTTON结构(通过C#P/Invokes的Win32 API).但是我想弄清楚如何,一旦我有按钮的句柄,抓住相关的上下文菜单文本.对于我想要检索的特定应用程序,有一些状态信息.按钮文本给我一些,但我需要上下文菜单文本来完成它.
有任何想法吗?
我正在创建一个具有类似于Photoshop的界面的应用程序:多个单独的表单都有助于编辑对象.所以,我将有多个表单,其中一个是"main"(提供文件菜单,设置菜单,等等),其他表单有控件,用于编辑以主窗体打开的对象.
让我们说简单,这是一个文本编辑器,我有MainForm和StyleForm.现在,我需要的是整个应用程序在Windows任务栏中显示为一个"栏".这可以通过为StyleForm设置ShowInTaskbar为false来实现,但是如果我,比如聚焦其他应用程序,然后关注我的应用程序,只有MainForm将在其他窗口之上,StyleForm将保持隐藏在我专注的应用程序窗口下先前.
我在这里找到答案当选择一个表单但导入一个dll 时,使与程序关联的所有表单都出现在前面.也许这有一个.net解决方案?
另外,我想在任务栏中显示不同的内容,而不是MainForm的标题,这可能吗?
当您处于以下情况时会发生这样的问题: - 在我的应用程序中有一个主窗口 - 我创建了另一个未在任务栏中显示的窗口,并且是一个工具窗口. - 我将第二个窗口显示为对话窗口(从主窗口) - 我切换到我系统中运行的另一个应用程序,当我回到应用程序时,显示主窗口,但它被第二个窗口锁定,没有表现出来.
这是第二个窗口的代码:
<Window x:Class="WpfApplication1.DialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DialogWindow" Height="300" Width="300" WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow" ShowInTaskbar="False">
<!--Some content-->
</Windows>
Run Code Online (Sandbox Code Playgroud)
这是显示第二个窗口的代码:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var dialogWindow = new DialogWindow();
dialogWindow.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
我如何解决这个问题,仍然显示一个没有在任务栏中显示的对话框窗口?