在Python中最简单的跨平台图形对话框弹出方式是什么?
我想要在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作为示例答案,因为它们和我想要的类似,但并不完美。
11 个回答
TkInter 通常是和 Python 一起提供的
# File: hello1.py
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
如果你想要看起来更像本地应用的界面,你就需要安装像 wxpython 这样的东西
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 只支持 GTK+,但我在 Gnome 和 KDE 中试过,它在这两者中看起来都很原生。不过,Windows 版本的外观就不太对劲,因为它用了错误的 GTK 主题?
还有其他程序,比如 KDialog 和 Xdialog,也许可以与类似的 Python 前端结合使用,检查可用的可执行文件,这样就能自动处理所有事情?(还有一个 KDialog 的 Ruby 前端。)
我也不知道 PyZenity 是否能在 OS X 上运行。
EasyGUI 是一个单文件的工具,它提供了一种简单的方法来使用 Tkinter 对话框,但这些对话框看起来还是很丑,不像本地的 Tkinter 对话框。
from easygui import msgbox
msgbox('Stuff')
你可以很容易地通过以下方式安装它:
$ sudo pip3 install --upgrade easygui
之前还有一个叫 EasyGuiTtk 的分支,但不幸的是现在已经不再可用了。