41

Python スクリプトで単純なダイアログをポップアップする最も簡単な方法が必要です。理想的には、ソリューションは次のようになります。

  • Windows、OS X、Gnome、KDE ​​で動作
  • どの OS でもネイティブ ダイアログのように見える
  • 最小限のコードが必要

シンプルな標準ダイアログをポップアップするには、最小限のコードのみが必要です。基本的に、「このテキストで標準ダイアログをポップアップする」または「質問 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')

2 つのボタンのいずれかを押してから、 にformat等しい'JPG'、または

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

そして、ボックスに入力して [OK] を押すと、response今は等しいです'bananas.txt'。他のコードは必要ありません。貧弱なユーザーに醜いコマンド ライン プロンプトは表示されません。

Zenity と EasyGUI は、私が望むものに似ていますが、完全ではないため、回答例としてリストしました。

[以前 Python フォーラムで質問されたもの]

4

10 に答える 10

23

EasyGUIは単一のファイルであり、Tkinterダイアログを操作する簡単な方法を提供しますが、それでも醜い非ネイティブのTkinterダイアログです。

from easygui import msgbox
msgbox('Stuff')

TkinterはUbuntuで醜いです TKinterはWindows7では醜いです

以下を使用して簡単にインストールできます。

$ sudo pip3 install --upgrade easygui

GitHubリポジトリがあり、ドキュメントは非常にきれいです。

以前は、EasyGuiTtkと呼ばれるフォークもありましたが、残念ながら現在は利用できません。

ここに画像の説明を入力してください

于 2009-10-28T03:25:49.347 に答える
16

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とWindowsXPの両方でPyZenityをテストしましたが、両方で動作します。

ZenityはGnomeでかなりよく見えます 驚くべきことに、ZenityはKDEでも見栄えがします WindowsのZenityのGTKテーマが間違っています

ZenityはGTK+のみであると読みましたが、GnomeとKDEで試してみたところ、どちらもネイティブに見えます。しかし、Windowsへの移植は間違ったGTKテーマを使用しているため、ネイティブには見えませんか?

KDialogXdialogのような他のプログラムもあり、同様のPythonフロントエンドに接続して、使用可能な実行可能ファイルをチェックして確認し、すべてを自動的に処理することができますか?(KDialog用のRubyフロントエンドもあります。)

PyZenityがOSXで動作するかどうかもわかりません。

于 2009-10-28T03:26:48.173 に答える
13

TkInterは通常Pythonで提供されます

# File: hello1.py

from Tkinter import *

root = Tk()

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

root.mainloop()

よりネイティブな外観が必要な場合は、wxpythonのようなものをインストールする必要があります

于 2009-10-28T03:24:51.860 に答える
11

The PyMsgBox module does almost exactly this. It uses the built-in tkinter module for its message box functions that follow the naming conventions of JavaScript: alert(), confirm(), prompt() and password() (which is prompt() but uses * when you type). These function calls block until the user clicks an OK/Cancel button. It's a cross-platform, pure Python module with no dependencies.

Native look-and-feel message boxes will be available in a future version.

Install with: pip install PyMsgBox

Sample usage:

>>> import pymsgbox
>>> pymsgbox.alert('This is an alert!', 'Title')
>>> response = pymsgbox.prompt('What is your name?')

Full documentation at http://pymsgbox.readthedocs.org/en/latest/

于 2014-09-04T00:24:43.750 に答える
10

エンドリスの tkMessageBox 回答をバックグラウンドで醜い空のウィンドウで拡張するには...

以下のコードは、背景ウィンドウなしでボックスをポップアップ表示します。

import Tkinter, tkMessageBox
root = Tkinter.Tk()
root.withdraw()
tkMessageBox.showinfo("my dialog title", "my dialog message")

これは、この記事の最後にある便利なコメントから直接引用したものです。Jason (コメント投稿者) と effbot.org に感謝します。

于 2011-02-20T21:03:23.133 に答える
6

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()
于 2009-11-05T14:36:48.540 に答える
6

@ endolith, re: zenity for Windows.

やあ、

「Zenity for Windows」を再パッケージし、正しい GTK テーマ ファイルを含めました。今はずっと良く見えます。:) ダウンロードできるようになりました: http://www.placella.com/software/zenity/

スクリーンショット:

代替テキスト
(出典: placella.com )

安らかに、ロスラン

于 2009-11-02T21:49:33.797 に答える
5

別の可能性はtkMessageBox モジュールです。これは明らかに標準ライブラリに組み込まれており、クロスプラットフォームですが、これは他のものよりもさらに醜いです:

import tkMessageBox
tkMessageBox.showinfo('Title','Stuff') 

Tkinterは超醜いです

于 2009-10-31T00:38:56.300 に答える
2

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()
于 2009-10-28T16:48:41.070 に答える
-3

これは不可能です。シンプルにしたい場合は、Tkinter が含まれているため、Tkinter を使用する必要があります。Tkinter が十分でない場合は、プラットフォームごとに個別に GUI を選択してパッケージ化する必要があります。

Tkinter を使用して、必要な部分をより使いやすいクラスにラップすることをお勧めします。

于 2009-11-05T14:47:06.467 に答える