我想用最简单的方法在Python脚本中弹出简单的对话框。理想情况下,解决方案是:
要弹出一个简单的标准对话框,只需要最少的代码。基本上你只是说“弹出一个带有这个文本的标准对话框”,或者“弹出一个带有问题x的对话框并将响应反馈到变量y”。
这适用于在命令行上运行的简单脚本。我不想知道GUI框架或者必须设置代码“启动GUI线程,注册事件处理程序,配置一些窗口属性,运行循环”等等。我不想设置窗户或之后关闭窗户。我把文本放在窗口和/或按钮和/或复选框中,它返回用户点击的内容。其他一切都应该自动处理。例如:
message_box('File conversion complete')
用于带有“Ok”按钮的标准对话框,或
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作为示例答案,因为它们与我想要的相似,但并不完美。
答案 0 :(得分:22)
EasyGUI是一个单独的文件,它提供了一种使用Tkinter对话框的简单方法,但它们仍然是丑陋的非本机Tkinter对话框。
from easygui import msgbox
msgbox('Stuff')
可以使用以下方法轻松安装:
$ sudo pip3 install --upgrade easygui
有GitHub repository,documentation非常整洁。
此前,还有一个名为EasyGuiTtk的分叉,遗憾的是它已不再可用。
答案 1 :(得分:13)
Zenity在Linux和Windows下运行,可以直接从Python调用:
import os
os.system('zenity --info --text="Stuff"')
需要捕获问题框中的返回值以进行操作,但这更复杂,并且您必须了解与子进程的通信等。
它也可以与PyZenity前端一起使用,这样可以简单地捕获返回值:
from PyZenity import InfoMessage
InfoMessage('Stuff')
我已经在Ubuntu和Windows XP中测试了PyZenity,它在两者中都有效。
我读到Zenity只是GTK +,但我在Gnome和KDE中尝试过,它看起来都是原生的。但是,Windows的端口看起来不是原生的,因为它使用了错误的GTK主题?
还有其他程序,如KDialog和Xdialog可能与类似的Python前端接口,可以检查并查看可用的可执行文件,以便自动处理所有内容? (也有一个Ruby frontend for KDialog。)
我不知道PyZenity是否在OS X下工作。
答案 2 :(得分:12)
TkInter通常随Python提供
# File: hello1.py
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
如果你想要更本地化的东西,你必须安装像wxpython
这样的东西答案 3 :(得分:8)
在endolith的tkMessageBox答案中扩展,背景中有一个丑陋的空窗口......
下面的代码弹出没有背景窗口的框。
import Tkinter, tkMessageBox
root = Tkinter.Tk()
root.withdraw()
tkMessageBox.showinfo("my dialog title", "my dialog message")
这是我在this article底部找到的有用评论中直接取消的。感谢Jason(评论者)和effbot.org。
答案 4 :(得分:8)
PyMsgBox模块几乎就是这样做的。它使用内置的tkinter模块作为其消息框函数,遵循JavaScript的命名约定:alert(),confirm(),prompt()和password()(这是prompt(),但在键入时使用*)。这些函数调用将阻塞,直到用户单击“确定/取消”按钮。它是一个跨平台的纯Python模块,没有依赖关系。
将来版本中将提供原生外观消息框。
安装时使用:pip install PyMsgBox
样本用法:
>>> import pymsgbox
>>> pymsgbox.alert('This is an alert!', 'Title')
>>> response = pymsgbox.prompt('What is your name?')
的完整文档
答案 5 :(得分:6)
@ endolith,re:zenity for Windows。
您好,
我重新打包了“Zenity for Windows”并包含了正确的GTK主题文件。现在看起来好多了。 :) 它现在可供下载:http://www.placella.com/software/zenity/
截图:
(来源:placella.com)
答案 6 :(得分:5)
wxPython是最好的Python GUI库(IMO)并使用本机小部件。
import wx
app = wx.PySimpleApp()
dialog = wx.MessageDialog(None, 'wxPython is awesome!', 'Dialog Box', wx.OK|wx.ICON_INFORMATION)
dialog.ShowModal()
dialog.Destroy()
app.MainLoop()
答案 7 :(得分:3)
另一种可能性是tkMessageBox module,显然是内置在标准库中并且是跨平台的,尽管这比其他更难看:
import tkMessageBox
tkMessageBox.showinfo('Title','Stuff')
答案 8 :(得分:1)
pyglet是另一种选择,尽管它可能不是最简单的。话虽这么说,它是跨平台的,只取决于python,所以没有外部依赖。只有这个事实才足以让它用于其他事实。
并且它可以很容易地处理多媒体,如果你想要显示图像或视频或其他什么,非常方便。
以下示例来自文档......
#!/usr/bin/python
import pyglet
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world',
font_name='Times New Roman',
font_size=36,
x=window.width/2, y=window.height/2,
anchor_x='center', anchor_y='center')
@window.event
def on_draw():
window.clear()
label.draw()
pyglet.app.run()
答案 9 :(得分:-3)
这是不可能的。如果你想要简单,那么你必须使用Tkinter,因为这是包含的内容。如果Tkinter不够好,那么你将不得不分别为每个平台选择和打包GUI。
我建议你使用Tkinter并在一个更简单易用的类中包装你需要的部分。