2009-10-28 12 views
32

मैं पाइथन स्क्रिप्ट में सरल संवाद पॉप अप करने का सबसे आसान तरीका चाहता हूं। आदर्श रूप में, समाधान होगा:पायथन में ग्राफिकल संवाद पॉप अप करने का सबसे आसान क्रॉस-प्लेटफार्म तरीका क्या है?

  • विंडोज, ओएस एक्स, Gnome, केडीई पर काम
  • देखो किसी भी ओएस
  • आवश्यकता होती है कम से कम कोड पर एक देशी संवाद

एक सरल पॉप अप करने के लिए की तरह मानक संवाद केवल न्यूनतम कोड की आवश्यकता होनी चाहिए। अनिवार्य रूप से आप बस "इस पाठ के साथ एक मानक संवाद पॉप अप" कह रहे हैं, या "चर एक्स के साथ एक संवाद पॉप अप करें और वैरिएबल वाई में फ़ीड प्रतिक्रिया"।

यह सरल लिपियों के लिए है जो अन्यथा कमांड लाइन पर चलेंगे। मैं जीयूआई ढांचे के बारे में नहीं जानना चाहता हूं या कोड स्थापित करना है जो कहता है "एक जीयूआई थ्रेड शुरू करें, एक ईवेंट हैंडलर पंजीकृत करें, कुछ विंडो गुणों को कॉन्फ़िगर करें, लूप चलाएं", आदि। मैं सेट नहीं करना चाहता एक खिड़की ऊपर या खिड़की के बाद बंद करें। मैं इसे विंडो और/या बटन और/या चेकबॉक्स में रखने के लिए पाठ देता हूं, यह उस उपयोगकर्ता को देता है जो उपयोगकर्ता ने क्लिक किया था। बाकी सब कुछ स्वचालित रूप से ख्याल रखा जाना चाहिए।

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' के बराबर है। कोई अन्य कोड आवश्यक है। खराब उपयोगकर्ता के लिए कोई बदसूरत कमांड लाइन संकेत नहीं देती है।

मैंने ज़ेनिटी और इज़ीगुई को उदाहरण के उत्तर के रूप में सूचीबद्ध किया है, क्योंकि वे जो चाहते हैं उसके समान हैं, लेकिन सही नहीं हैं।

[Previously asked on Python Forum]

+0

इसके अलावा डुप्लिकेट पर सभी दस्तावेज़ (वास्तव में ग्रेग Hewgill की तुलना में ज़्यादा सटीकता डुप्लिकेट): http://stackoverflow.com/

साथ स्थापित करें प्रश्न/257398/संदेश-बॉक्स-इन-पायथन http://stackoverflow.com/questions/1052420/tkkinter-message-box –

+0

हम्म ... python-forum.or के लिंक के बाद जी सवाल, प्रश्न का बिंदु एसओ पर जो दिखाया गया है उसमें काफी बदलाव करता है। एसओ पर, शीर्षक और पाठ दृढ़ता से सुझाव देते हैं कि शीर्ष प्राथमिकता सरल संवाद है। लेकिन python-forum.org पर, यह स्पष्ट हो जाता है कि प्राथमिकता देशी दिखने और महसूस करने वाली है, और यह कि टिंकर एक विकल्प नहीं है। यह वास्तव में सब कुछ बदलता है, क्योंकि कम-आधारित समाधान सबसे स्पष्ट सरल हैं। –

+0

वे दोनों प्राथमिकता हैं। :) – endolith

उत्तर

11

TkInter आमतौर पर अजगर

# File: hello1.py 

from Tkinter import * 

root = Tk() 

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

root.mainloop() 

साथ आपूर्ति की है आप चाहते हैं और अधिक देशी देख कुछ है, तो आप wxPython

+6

वहाँ भी tkMessageBox.showinfo ('शीर्षक', 'सामग्री') – endolith

20

EasyGUI की तरह कुछ स्थापित करने के लिए होगा, तो एक एकल फाइल है , और टिंकर संवाद के साथ काम करने का एक आसान तरीका प्रदान करता है, लेकिन वे अभी भी बदसूरत गैर-देशी टिंकर संवाद हैं।

from easygui import msgbox 
msgbox('Stuff') 

Tkinter is ugly on Ubuntu TKinter is ugly on Windows 7

यह आसानी से उपयोग करते हुए स्थापित किया जा सकता:

$ sudo pip3 install --upgrade easygui 

वहाँ एक GitHub repository है और documentation बहुत साफ है।

पहले, EasyGuiTtk नामक एक कांटा भी था, जो दुर्भाग्य से अब उपलब्ध नहीं है। लिनक्स और Windows तहत

enter image description here

+2

को बदसूरत नहीं होना चाहिए, क्योंकि पाइथन 2.7 के बाद से ... जिसमें ttk शामिल है: http://code.google.com/p/python-ttk/ विकी/स्क्रीनशॉट –

+0

लेकिन क्रॉस-प्लेटफ़ॉर्म तरीके से इसे गैर-बदसूरत बनाना कितना मुश्किल है? – endolith

+0

@ श्रीधर रतनकुमार: क्या गैर-कुरूपता पाइजेनिटी या इज़ीगुई जैसी चीजों में बनाई जा सकती है? – endolith

12

Zenity काम करता है, और सीधे अजगर से कहा जा सकता है:

import os 
os.system('zenity --info --text="Stuff"') 

सवाल बक्से से वापसी मान, हालांकि, जो अधिक है पर अभिनय के लिए कब्जा किया जा करने की जरूरत है जटिल, और आपको subprocesses, आदि के साथ संवाद करने के बारे में सीखना है।

इसका उपयोग PyZenity फ्रंट-एंड के साथ भी किया जा सकता है, जो कैप्चरिंग रिटर्न वैल बनाता है ues सरल:

from PyZenity import InfoMessage 
InfoMessage('Stuff') 

मैंने उबंटू और विंडोज एक्सपी दोनों में पायज़ेनिटी का परीक्षण किया है, और यह दोनों में काम करता है।

Zenity looks pretty good in Gnome Zenity looks good in KDE, too, suprisingly Zenity in Windows has the wrong GTK theme

मैंने पढ़ा है कि Zenity जीटीके + केवल है, लेकिन मैं Gnome और KDE में इसे करने की कोशिश और यह दोनों में देशी लग रहा है। विंडोज़ के लिए बंदरगाह देशी नहीं दिखता है, हालांकि, क्योंकि यह गलत जीटीके विषय का उपयोग करता है?

अन्य प्रोग्राम भी हैं जैसे KDialog और Xdialog जो एक समान पायथन फ्रंटेंड में इंटरफेस हो सकते हैं जो जांच और देख सकता है कि कौन से एक्जिक्यूटिव उपलब्ध हैं ताकि यह स्वचालित रूप से सबकुछ का ख्याल रख सके? (Ruby frontend for KDialog भी है।)

मुझे नहीं पता कि PyZenity ओएस एक्स के तहत काम करता है या नहीं।

1

पायगलेट एक और विकल्प है, हालांकि यह सबसे आसान नहीं हो सकता है। कहा जा रहा है, यह क्रॉस-प्लेटफ़ॉर्म है और केवल पायथन पर निर्भर करता है, इसलिए कोई बाहरी निर्भरता नहीं है। अकेले तथ्य यह है कि दूसरों पर इसका इस्तेमाल करने के लिए पर्याप्त कारण हो सकता है।

और यह सब कुछ आसानी से मल्टीमीडिया को भी संभाल सकता है, अगर आप कोई छवि या वीडियो या कुछ प्रदर्शित करना चाहते हैं तो बहुत आसान है।

नीचे दिए गए उदाहरण प्रलेखन से है ...

#!/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() 
+0

क्या पगलेट (या किसी भी प्रकार की संवाद विंडो) के साथ संदेशबॉक्स बनाने का कोई तरीका है? – memyself

3

एक और संभावना है, tkMessageBox module, जो जाहिरा तौर पर मानक पुस्तकालय में बनाया गया है और पार मंच है है, हालांकि यह बाकी की तुलना में और भी अधिक बदसूरत है :

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

Tkinter is super ugly

6

@ endolith, पुन: विंडोज के लिए zenity।

हाय,

मैं "विंडोज के लिए Zenity" को नई शक्ल और सही जीटीके-विषय फ़ाइल शामिल थे। यह अब बहुत बेहतर दिखता है।:) यह डाउनलोड के लिए उपलब्ध है: http://www.placella.com/software/zenity/

स्क्रीनशॉट:

alt text http://www.placella.com/software/zenity/zenity-win32.png

शांति, Rouslan

+0

यदि यह मुश्किल नहीं है, तो यह डिफ़ॉल्ट रूप से उस तरह से होना चाहिए! :) क्या यह थीम विंडोज के किसी भी संस्करण या सिर्फ एक्सपी पर काम करती है? – endolith

+0

हाय, मैंने इस समस्या को सही किया और इस तरह के परिवर्तनों को दर्शाने के लिए उपरोक्त पोस्ट को संपादित किया। ओह, और मुझे Vista या W7 के बारे में निश्चित नहीं है, शायद कोई और प्रतिक्रिया पोस्ट करेगा ... आनंद लें, हर कोई! शांति, रूसलान – Roccivic

5

wxPython सबसे अच्छा अजगर जीयूआई पुस्तकालय (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() 
+1

यह बहुत भयानक नहीं है। मुझे समझ में नहीं आता कि यह सिर्फ एक लाइनर क्यों नहीं है। आयात wx wx.OpenADialogBox ('कुछ पाठ') – endolith

+1

क्योंकि जीयूआई का उपयोग करने वाले अधिकांश लोग केवल एक पॉपअप से अधिक चाहते हैं। आप एक बढ़त मामला हैं। – jmucchiello

+4

मुझे लगता है कि बहुत सारे लोग हैं जो इस तरह के संवादों को उनके स्क्रिप्ट में उपलब्ध कराएंगे यदि वे उपलब्ध थे। – endolith

-3

यह संभव नहीं है। यदि आप सरल चाहते हैं तो आपको टिंकर का उपयोग करना होगा क्योंकि इसमें शामिल है। यदि टिंकर पर्याप्त नहीं है तो आपको प्रत्येक मंच के लिए अलग-अलग जीयूआई चुनना होगा और पैकेज करना होगा।

मेरा सुझाव है कि आप टिंकर का उपयोग करें और उन हिस्सों को लपेटें जिन्हें आपको कक्षा में चाहिए जो उपयोग करने के लिए और भी आसान होगा।

+0

यह बिल्कुल सही नहीं है। उदाहरण के लिए, पाइथन, ctypes.windll.user32.MessageBoxW() को कॉल करने के लिए अंतर्निहित ctypes मॉड्यूल का उपयोग कर सकते हैं और Windows मूल संदेश बॉक्स प्रकट कर सकते हैं। हालांकि, आप सही हैं कि इसमें प्रत्येक ऑपरेटिंग सिस्टम के लिए अलग-अलग कोड जोड़ने की भी आवश्यकता होगी। –

8
पृष्ठभूमि में बदसूरत खाली खिड़की के साथ endolith के tkMessageBox जवाब पर विस्तार करने के लिए

...

कोड के नीचे पृष्ठभूमि खिड़की के बिना बॉक्स पॉप अप होता।

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

यह एक उपयोगी टिप्पणी मैं this article के नीचे पाया से सीधे उठाया है। जेसन (टिप्पणीकर्ता) और effbot.org के लिए धन्यवाद।

7

PyMsgBox मॉड्यूल लगभग बिल्कुल यही करता है। यह अपने संदेश बॉक्स फ़ंक्शंस के लिए बिल्ट-इन टिंकर मॉड्यूल का उपयोग करता है जो जावास्क्रिप्ट के नामकरण सम्मेलनों का पालन करता है: चेतावनी(), पुष्टि(), प्रॉम्प्ट() और पासवर्ड() (जो प्रॉम्प्ट() है लेकिन जब आप टाइप करते हैं तो इसका उपयोग करता है)। ये फ़ंक्शन ब्लॉक तक कॉल करता है जब तक कि उपयोगकर्ता ठीक/रद्द बटन पर क्लिक न करे। यह एक क्रॉस-प्लेटफॉर्म, शुद्ध पायथन मॉड्यूल है जिसमें कोई निर्भरता नहीं है।

देशी दिखने और महसूस संदेश बॉक्स भविष्य के संस्करण में उपलब्ध होंगे। pip install PyMsgBox

नमूना उपयोग::

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

http://pymsgbox.readthedocs.org/en/latest/

संबंधित मुद्दे