end*_*ith 38 python dialog cross-platform zenity
我想用最简单的方法在Python脚本中弹出简单的对话框.理想情况下,解决方案将:
要弹出一个简单的标准对话框,只需要很少的代码.基本上你只是说"用这个文本弹出标准对话框",或者"弹出一个带有问题x的对话框并将响应反馈到变量y".
这适用于在命令行上运行的简单脚本.我不想知道GUI框架或者必须设置代码"启动GUI线程,注册事件处理程序,配置一些窗口属性,运行循环"等等.我不想设置窗户或之后关闭窗户.我把文本放在窗口和/或按钮和/或复选框中,它返回用户点击的内容.其他一切都应该自动处理.例如:
message_box('File conversion complete')
Run Code Online (Sandbox Code Playgroud)
对于带有"确定"按钮的标准对话框,或
balloon_tip('File conversion complete')
Run Code Online (Sandbox Code Playgroud)
对于系统托盘弹出气球,或
format = button_box('Which file format do you want?', 'JPG', 'PNG')
Run Code Online (Sandbox Code Playgroud)
然后他们按下两个按钮中的一个,然后format
等于'JPG'
,或
response = text_query('What would you like to name the file?')
Run Code Online (Sandbox Code Playgroud)
然后在他们输入框并输入Ok后,response
现在等于'bananas.txt'
.无需其他代码.没有丑陋的命令行提示穷人.
我列出了Zenity和EasyGUI作为示例答案,因为它们与我想要的相似,但并不完美.
[ 以前在Python论坛上问过 ]
end*_*ith 22
EasyGUI是一个单独的文件,它提供了一种使用Tkinter对话框的简单方法,但它们仍然是丑陋的非本机Tkinter对话框.
from easygui import msgbox
msgbox('Stuff')
Run Code Online (Sandbox Code Playgroud)
可以使用以下方法轻松安装:
$ sudo pip3 install --upgrade easygui
Run Code Online (Sandbox Code Playgroud)
以前,还有一个名为EasyGuiTtk的分支,遗憾的是它已不再可用.
end*_*ith 14
Zenity在Linux和Windows下运行,可以直接从Python调用:
import os
os.system('zenity --info --text="Stuff"')
Run Code Online (Sandbox Code Playgroud)
然而,需要捕获来自问题框的返回值以进行操作,这更复杂,并且您必须了解与子进程的通信等.
它也可以与PyZenity前端一起使用,这使得捕获返回值变得简单:
from PyZenity import InfoMessage
InfoMessage('Stuff')
Run Code Online (Sandbox Code Playgroud)
我已经在Ubuntu和Windows XP中测试了PyZenity,它在两者中都有效.
我读到Zenity只是GTK +,但我在Gnome和KDE中尝试过,它看起来都是原生的.但是,Windows的端口看起来不是原生的,因为它使用了错误的GTK主题?
还有像KDialog和Xdialog这样的其他程序可以连接到类似的Python前端,它可以检查并查看可用的可执行文件,以便它自动处理所有事情?(也有KDialog的Ruby前端.)
我不知道PyZenity是否在OS X下工作.
Joh*_*ooy 12
TkInter通常提供Python
# File: hello1.py
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
如果你想要更本地化的东西,你必须安装类似wxpython的东西
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?')
Run Code Online (Sandbox Code Playgroud)
http://pymsgbox.readthedocs.org/en/latest/上的完整文档
使用后台丑陋的空窗口扩展endolith的tkMessageBox答案...
下面的代码弹出没有背景窗口的框.
import Tkinter, tkMessageBox
root = Tkinter.Tk()
root.withdraw()
tkMessageBox.showinfo("my dialog title", "my dialog message")
Run Code Online (Sandbox Code Playgroud)
这是直接从一个有用的评论,我发现在底部抬起这篇文章.感谢Jason(评论者)和effbot.org.
@ endolith,re:zenity for Windows.
嗨,
我重新打包了"Zenity for Windows"并包含了正确的GTK主题文件.现在看起来好多了.:)现在可以下载了:http://www.placella.com/software/zenity/
截图:
替代文字http://www.placella.com/software/zenity/zenity-win32.png
和平,鲁斯兰
另一种可能性是tkMessageBox 模块,它显然内置于标准库中并且是跨平台的,尽管这比其他模块更难看:
import tkMessageBox
tkMessageBox.showinfo('Title','Stuff')
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)