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

end*_*ith 38 python dialog cross-platform zenity

我想用最简单的方法在Python脚本中弹出简单的对话框.理想情况下,解决方案将:

  • 适用于Windows,OS X,Gnome,KDE
  • 看起来像任何操作系统上的本机对话框
  • 需要最少的代码

要弹出一个简单的标准对话框,只需要很少的代码.基本上你只是说"用这个文本弹出标准对话框",或者"弹出一个带有问题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)

Tkinter在Ubuntu上很难看 TKinter在Windows 7上很难看

可以使用以下方法轻松安装:

$ sudo pip3 install --upgrade easygui
Run Code Online (Sandbox Code Playgroud)

有一个GitHub存储库,文档非常整洁.

以前,还有一个名为EasyGuiTtk的分支,遗憾的是它已不再可用.

在此输入图像描述

  • Tk不一定是丑陋的,不管是因为Python 2.7,包括ttk:http://code.google.com/p/python-ttk/wiki/Screenshots (2认同)

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在Gnome看起来很不错 令人惊讶的是,Zenity在KDE看起来也很不错 Windows中的Zenity具有错误的GTK主题

我读到Zenity只是GTK +,但我在Gnome和KDE中尝试过,它看起来都是原生的.但是,Windows的端口看起来不是原生的,因为它使用了错误的GTK主题?

还有像KDialogXdialog这样的其他程序可以连接到类似的Python前端,它可以检查并查看可用的可执行文件,以便它自动处理所有事情?(也有KDialogRuby前端.)

我不知道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的东西

  • 还有tkMessageBox.showinfo('Title','Stuff') (6认同)

Al *_*art 9

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/上的完整文档


Rus*_*uss 8

使用后台丑陋的空窗口扩展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.


Roc*_*vic 6

@ endolith,re:zenity for Windows.

嗨,

我重新打包了"Zenity for Windows"并包含了正确的GTK主题文件.现在看起来好多了.:)现在可以下载了:http://www.placella.com/software/zenity/

截图:

替代文字http://www.placella.com/software/zenity/zenity-win32.png

和平,鲁斯兰


end*_*ith 5

另一种可能性是tkMessageBox 模块,它显然内置于标准库中并且是跨平台的,尽管这比其他模块更难看:

import tkMessageBox
tkMessageBox.showinfo('Title','Stuff') 
Run Code Online (Sandbox Code Playgroud)

Tkinter 超级丑


Fog*_*ird 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()
Run Code Online (Sandbox Code Playgroud)

  • 我认为有很多人会在他们的脚本中使用这样的对话框,如果它们可用的话. (4认同)