在Python中最简单的跨平台图形对话框弹出方式是什么?

41 投票
11 回答
33396 浏览
提问于 2025-04-15 15:26

我想要在Python脚本中弹出简单对话框的最简单方法。理想情况下,这个解决方案应该:

  • 能在Windows、OS X、Gnome和KDE上运行
  • 在任何操作系统上看起来都像是本地对话框
  • 代码量尽可能少

弹出一个简单的标准对话框只需要很少的代码。基本上,你只需要说“弹出一个带有这个文本的标准对话框”,或者“弹出一个关于问题x的对话框,并把用户的回答放到变量y里”。

这是为了那些本来会在命令行上运行的简单脚本。我不想了解图形用户界面框架,也不想设置那些“启动一个GUI线程,注册一个事件处理器,配置一些窗口属性,运行一个循环”等等的代码。我不想自己设置窗口或在之后关闭窗口。我只需要给它要放在窗口里的文本和/或按钮和/或复选框,它就能返回用户点击了什么。其他的事情应该自动处理。例如:

message_box('File conversion complete')

用于一个带有“确定”按钮的标准对话框,或者

balloon_tip('File conversion complete')

用于系统托盘的弹出气泡,或者

format = button_box('Which file format do you want?', 'JPG', 'PNG')

用户按下两个按钮中的一个,然后 format 就等于 'JPG',或者

response = text_query('What would you like to name the file?')

用户在框里输入后按下确定,response 现在等于 'bananas.txt'。不需要其他代码。也不需要给用户显示难看的命令行提示。

我列出了Zenity和EasyGUI作为示例答案,因为它们和我想要的类似,但并不完美。

[之前在Python论坛上提问过]

11 个回答

13

TkInter 通常是和 Python 一起提供的

# File: hello1.py

from Tkinter import *

root = Tk()

w = Label(root, text="Hello, world!")
w.pack()

root.mainloop()

如果你想要看起来更像本地应用的界面,你就需要安装像 wxpython 这样的东西

17

Zenity 是一个可以在 Linux 和 Windows 上运行的工具,可以直接通过 Python 调用:

import os
os.system('zenity --info --text="Stuff"')

如果用 --warning 代替 --info,就会弹出一个警告对话框,而不是信息框。其他选项可以在这里找到:https://help.gnome.org/users/zenity/stable/

不过,从问题框中获取返回值是比较复杂的,你需要学习如何与子进程进行通信等等。

它还可以与 PyZenity 前端一起使用,这样获取返回值就简单多了:

from PyZenity import InfoMessage
InfoMessage('Stuff')

我在 Ubuntu 和 Windows XP 上都测试过 PyZenity,结果在这两种系统上都能正常工作。

Zenity 在 Gnome 中看起来不错 Zenity 在 KDE 中也看起来不错,令人惊讶 Zenity 在 Windows 中的 GTK 主题不对

我听说 Zenity 只支持 GTK+,但我在 Gnome 和 KDE 中试过,它在这两者中看起来都很原生。不过,Windows 版本的外观就不太对劲,因为它用了错误的 GTK 主题?

还有其他程序,比如 KDialogXdialog,也许可以与类似的 Python 前端结合使用,检查可用的可执行文件,这样就能自动处理所有事情?(还有一个 KDialog 的 Ruby 前端。)

我也不知道 PyZenity 是否能在 OS X 上运行。

23

EasyGUI 是一个单文件的工具,它提供了一种简单的方法来使用 Tkinter 对话框,但这些对话框看起来还是很丑,不像本地的 Tkinter 对话框。

from easygui import msgbox
msgbox('Stuff')

Tkinter 在 Ubuntu 上看起来很丑 Tkinter 在 Windows 7 上看起来很丑

你可以很容易地通过以下方式安装它:

$ sudo pip3 install --upgrade easygui

这里有一个 GitHub 仓库,而且 文档 也很整洁。

之前还有一个叫 EasyGuiTtk 的分支,但不幸的是现在已经不再可用了。

在这里输入图片描述

撰写回答