পাইথনে আমি কীভাবে একটি সাধারণ বার্তা বাক্স তৈরি করতে পারি?


119

আমি alert()জাভাস্ক্রিপ্ট হিসাবে একই প্রভাব জন্য সন্ধান করছি ।

আমি আজ বিকালে টুইস্টড.ওয়েব ব্যবহার করে একটি সাধারণ ওয়েব-ভিত্তিক দোভাষী লিখেছি। আপনি মূলত একটি ফর্মের মাধ্যমে পাইথন কোডের একটি ব্লক জমা দিন এবং ক্লায়েন্ট এসে এটিকে ধরে এবং এটিকে কার্যকর করে। আমি প্রতিবার বয়লারপ্লেট ডাব্লু এক্স পাইথন বা টাকআইন্টার কোডের পুরো গুচ্ছটি পুনরায় না লিখে একটি সহজ পপআপ বার্তা তৈরি করতে সক্ষম হতে চাই (যেহেতু কোডটি কোনও ফর্মের মাধ্যমে জমা দেওয়া হয় এবং পরে অদৃশ্য হয়ে যায়)।

আমি tkMessageBox চেষ্টা করেছি:

import tkMessageBox
tkMessageBox.showinfo(title="Greetings", message="Hello World!")

তবে এটি একটি টেক আইকন সহ পটভূমিতে অন্য উইন্ডোটি খুলবে। আমি এটা চাই না। আমি কিছু সাধারণ ডাব্লুএক্সপিথন কোডের সন্ধান করছিলাম তবে এটির জন্য সর্বদা একটি ক্লাস স্থাপন করা এবং অ্যাপ লুপ প্রবেশ করা প্রয়োজন Py পাইথনে কোনও বার্তা বাক্স তৈরি করার কোনও সহজ, ধরা-মুক্ত উপায় নেই?

উত্তর:


257

আপনি এর মতো একটি আমদানি এবং একক লাইন কোড ব্যবহার করতে পারেন:

import ctypes  # An included library with Python install.   
ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1)

বা এর মতো কোনও ফাংশন (এমবক্স) সংজ্ঞায়িত করুন:

import ctypes  # An included library with Python install.
def Mbox(title, text, style):
    return ctypes.windll.user32.MessageBoxW(0, text, title, style)
Mbox('Your title', 'Your text', 1)

শৈলীগুলি নিম্নলিখিত হিসাবে নোট করুন:

##  Styles:
##  0 : OK
##  1 : OK | Cancel
##  2 : Abort | Retry | Ignore
##  3 : Yes | No | Cancel
##  4 : Yes | No
##  5 : Retry | No 
##  6 : Cancel | Try Again | Continue

আনন্দ কর!

দ্রষ্টব্য: MessageBoxWপরিবর্তে ব্যবহারের জন্য সম্পাদিতMessageBoxA


2
ঠিক আমি খুঁজছেন ছিল কি. ওপিও যা মনে হচ্ছে তা থেকে উত্তর হিসাবে চিহ্নিত করা উচিত!
কোডমনকি

3
সাধরণ। সম্ভবত আমি খুব শীঘ্রই কথা বলেছি। আমি কেবল শিরোনাম এবং বার্তা উভয়ের জন্য একটি একক অক্ষর পাচ্ছি। অদ্ভুত ...
CodeMonkey

18
মেসেজবক্সের পরিবর্তে মেসেজবক্সডাব্লু ব্যবহার করতে হয়েছিল।
কোডমনকি

9
অজগর 3 এ কোডড মোনকি, ম্যাসেজবক্সের পরিবর্তে ম্যাসেজবক্সডাব্লু ব্যবহার করুন
অলিভার নি

2
দ্রষ্টব্য: আমার পপআপটি ইংরেজিতে ছিল না, এবং ব্যবহারকারী বুরহান খালিদের উত্তর পড়েও
এরি

50

ইজগুইয়ের দিকে তাকিয়েছ ?

import easygui

easygui.msgbox("This is a message!", title="simple gui")

7
এটি টিন্টার নয়, এটি ডিফল্টরূপে প্রেরণ করা হয়নি, অবাক, অযথা নির্ভরতা আনতে এমন সাধারণ কার্যকারিতাটি চালু করতে আগ্রহী কে?
তেবে

7
আসলে জেকান্ট, ইজিগুই হ'ল টিনকটারের চারপাশে একটি মোড়ক। হ্যাঁ, এটি একটি অতিরিক্ত নির্ভরতা, তবে এটি একটি একক অজগর ফাইল। কিছু বিকাশকারী মনে করতে পারে ডেড-সিম্পল জিইউআই বাস্তবায়নের জন্য নির্ভরতা তার পক্ষে মূল্যবান।
রায়ান জিনস্ট্রোম

22

এছাড়াও আপনি অন্য উইন্ডোটি প্রত্যাহারের আগে এমন অবস্থান তৈরি করতে পারেন যাতে আপনি নিজের বার্তাটি স্থির করেন

#!/usr/bin/env python

from Tkinter import *
import tkMessageBox

window = Tk()
window.wm_withdraw()

#message at x:200,y:200
window.geometry("1x1+200+200")#remember its .geometry("WidthxHeight(+or-)X(+or-)Y")
tkMessageBox.showerror(title="error",message="Error Message",parent=window)

#centre screen message
window.geometry("1x1+"+str(window.winfo_screenwidth()/2)+"+"+str(window.winfo_screenheight()/2))
tkMessageBox.showinfo(title="Greetings", message="Hello World!")

3
কোন পদ্ধতি যাতে আমরা pross প্রয়োজন হবে না হয়, ঠিক আছে বোতাম tkMessageBox এবং এটি স্বয়ংক্রিয়ভাবে প্রক্রিয়া কি?
वर्षा_হোল্লা

@ ভার্সা_হোল্লা মেসেজ বক্সের কাজটি এমন নয়। আপনি টাইমার সহ একটি স্ট্যান্ডার্ড উইন্ডো তৈরি করার দিকে নজর দিতে পারেন।
কেলি এলটন

19

আপনার উপস্থাপিত কোডটি ঠিক আছে! আপনাকে কেবল এই কোড সহ "ব্যাকগ্রাউন্ডে অন্য উইন্ডো" স্পষ্টভাবে তৈরি এবং এটি আড়াল করতে হবে:

import Tkinter
window = Tkinter.Tk()
window.wm_withdraw()

আপনার মেসেজবক্সের ঠিক আগে।


4
এটিকে পরিষ্কারভাবে বেরিয়ে আসার জন্য আমাকে এর শেষে "উইন্ডোজ.ডেস্ট্রয় ()" যুক্ত করতে হয়েছিল।
কুজ্জুরু

11

পাইএমএসজিবক্স মডিউল ঠিক এটি করে। এটিতে বার্তা বাক্সের কার্য রয়েছে যা জাভাস্ক্রিপ্টের নামকরণ কনভেনশনগুলি অনুসরণ করে: সতর্কতা (), কনফার্ম (), প্রম্পট () এবং পাসওয়ার্ড () যা প্রম্পট () তবে আপনি টাইপ করার সময় * ব্যবহার করেন)। ব্যবহারকারী কোনও ঠিক আছে / বাতিল বোতামটি ক্লিক না করা অবধি এই ফাংশনগুলি কল করে। এটি একটি ক্রস প্ল্যাটফর্ম, কোনও নির্ভরতা ছাড়াই বিশুদ্ধ পাইথন মডিউল।

এর সাথে ইনস্টল করুন: 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/ এ সম্পূর্ণ ডকুমেন্টেশন


অদ্ভুত। আপনি লিখেছেন যে এটির কোনও নির্ভরতা নেই, তবে আমি যখন এটি ব্যবহার করার চেষ্টা করব তখন এটি মুদ্রিত হয়AssertionError: Tkinter is required for pymsgbox
shitpoet

আমার এটিকে পরিবর্তন করা উচিত: স্ট্যান্ডার্ড লাইব্রেরির বাইরে পেনসগবক্সের কোনও নির্ভরতা নেই, যা টিনকিটার অংশ। পাইথনের কোন সংস্করণ এবং আপনি কী ওএস চালু করছেন?
আল সুইগার্ট

দুঃখিত, আমি পাইথনে নুব আছি, আমি ভেবেছিলাম যে সমস্ত পাইথন লিবস ইনস্টল করা আছে pipতবে বাস্তবে লিবসের কিছু অংশ অন্যভাবে ইনস্টল করা হয় - সিস্টেম প্যাকেজ ম্যানেজার ব্যবহার করে। সুতরাং আমি python-tkআমার প্যাকেজ ম্যানেজার ব্যবহার করে ইনস্টল করেছি। আমি ডেবিয়ানে পাইথন ২.7 ব্যবহার করছি।
shitpoet

অফটোপিক: তবে পাইএমএসজিবক্স / টাক দ্বারা নির্মিত বার্তা বাক্সটি আমার
দেবিয়ানকে

10

উইন্ডোজে আপনি ব্যবহারকারীর 32 লাইব্রেরির সাথে সিটি টাইপ ব্যবহার করতে পারেন :

from ctypes import c_int, WINFUNCTYPE, windll
from ctypes.wintypes import HWND, LPCSTR, UINT
prototype = WINFUNCTYPE(c_int, HWND, LPCSTR, LPCSTR, UINT)
paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", None), (1, "flags", 0)
MessageBox = prototype(("MessageBoxA", windll.user32), paramflags)

MessageBox()
MessageBox(text="Spam, spam, spam")
MessageBox(flags=2, text="foo bar")

9

ম্যাকে পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে একটি মডিউল নামে পরিচিত EasyDialogs। এছাড়া এ (ctypes ভিত্তি করে) উইন্ডোজ সংস্করণ http://www.averdevelopment.com/python/EasyDialogs.html

যদি এটি আপনার কাছে গুরুত্বপূর্ণ হয়: এটি নেটিগ ডায়লগ ব্যবহার করে এবং টিকিন্টারের উপর নির্ভর করে যেমন ইতিমধ্যে উল্লিখিত হয়েছে easygui, তবে এতে তত বেশি বৈশিষ্ট্য নাও থাকতে পারে।


7
import ctypes
ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1)

শেষ নম্বর (এখানে 1) উইন্ডো স্টাইল পরিবর্তন করতে পারে (কেবল বোতাম নয়!):

## Button styles:
# 0 : OK
# 1 : OK | Cancel
# 2 : Abort | Retry | Ignore
# 3 : Yes | No | Cancel
# 4 : Yes | No
# 5 : Retry | No 
# 6 : Cancel | Try Again | Continue

## To also change icon, add these values to previous number
# 16 Stop-sign icon
# 32 Question-mark icon
# 48 Exclamation-point icon
# 64 Information-sign icon consisting of an 'i' in a circle

উদাহরণ স্বরূপ,

ctypes.windll.user32.MessageBoxW(0, "That's an error", "Warning!", 16)

দেব এই :

এখানে চিত্র বর্ণনা লিখুন


1

ব্যবহার

from tkinter.messagebox import *
Message([master], title="[title]", message="[message]")

মাস্টার উইন্ডোটি আগে তৈরি করতে হবে। এটি পাইথন ৩ এর জন্য This এটি fot wxPython নয়, তবে টিনকটারের জন্য।


রবার্টের উত্তরে "আমদানি *" সম্পর্কে আমার মন্তব্য দেখুন।
জার্জেন এ। এয়ারহার্ড

1
import sys
from tkinter import *
def mhello():
    pass
    return

mGui = Tk()
ment = StringVar()

mGui.geometry('450x450+500+300')
mGui.title('My youtube Tkinter')

mlabel = Label(mGui,text ='my label').pack()

mbutton = Button(mGui,text ='ok',command = mhello,fg = 'red',bg='blue').pack()

mEntry = entry().pack 

এছাড়াও, দয়া করে, সকলের ভালবাসার জন্য হ'ল পিইপি 8 এবং পাইথোনিক, নিজেকে "ইম্পোর্ট *" বন্ধ করুন। এটা খারাপ, মাকে?
জর্জেন এ। এয়ারহার্ড

1

এছাড়াও আপনি অন্য উইন্ডোটি প্রত্যাহারের আগে এমন অবস্থান তৈরি করতে পারেন যাতে আপনি নিজের বার্তাটি স্থির করেন

from tkinter import *
import tkinter.messagebox

window = Tk()
window.wm_withdraw()

# message at x:200,y:200
window.geometry("1x1+200+200")  # remember its.geometry("WidthxHeight(+or-)X(+or-)Y")
tkinter.messagebox.showerror(title="error", message="Error Message", parent=window)

# center screen message
window.geometry(f"1x1+{round(window.winfo_screenwidth() / 2)}+{round(window.winfo_screenheight() / 2)}")
tkinter.messagebox.showinfo(title="Greetings", message="Hello World!")

দয়া করে দ্রষ্টব্য: লুইস কাউলেসের জবাব কেবল পাইথন 3 এড, কারণ টিনকটারটি অজগর 2 পরে পরিবর্তিত হয়েছে আপনি যদি নিজের কোডটি ব্যাকওয়ার্ডের সাথে তুলনামূলক করতে চান তবে এই জাতীয় কিছু করুন:

try:
    import tkinter
    import tkinter.messagebox
except ModuleNotFoundError:
    import Tkinter as tkinter
    import tkMessageBox as tkinter.messagebox

0

সেরা নয়, এখানে কেবলমাত্র টিন্টার ব্যবহার করে আমার বুনিয়াদ বার্তা বাক্স।

#Python 3.4
from    tkinter import  messagebox  as  msg;
import  tkinter as      tk;

def MsgBox(title, text, style):
    box = [
        msg.showinfo,       msg.showwarning,    msg.showerror,
        msg.askquestion,    msg.askyesno,       msg.askokcancel,        msg.askretrycancel,
];

tk.Tk().withdraw(); #Hide Main Window.

if style in range(7):
    return box[style](title, text);

if __name__ == '__main__':

Return = MsgBox(#Use Like This.
    'Basic Error Exemple',

    ''.join( [
        'The Basic Error Exemple a problem with test',                      '\n',
        'and is unable to continue. The application must close.',           '\n\n',
        'Error code Test',                                                  '\n',
        'Would you like visit http://wwww.basic-error-exemple.com/ for',    '\n',
        'help?',
    ] ),

    2,
);

print( Return );

"""
Style   |   Type        |   Button      |   Return
------------------------------------------------------
0           Info            Ok              'ok'
1           Warning         Ok              'ok'
2           Error           Ok              'ok'
3           Question        Yes/No          'yes'/'no'
4           YesNo           Yes/No          True/False
5           OkCancel        Ok/Cancel       True/False
6           RetryCancal     Retry/Cancel    True/False
"""

আপনি আমদানি বিন্যাস সম্পূর্ণভাবে bonণদাতাদের। আপনি কি কোনও পুরানো কোবল বা ফরটারান প্রোগ্রামার, কোনও সুযোগেই? ;-)
জার্গেন এ। এরহার্ড

0

আমার পাইথন মডিউলটি দেখুন: পাইপ ইনস্টল কুইকগুই (ডাব্লুএক্সপিথন প্রয়োজন, তবে ডাব্লুএক্সপিথনের কোনও জ্ঞানের প্রয়োজন নেই) https://pypi.python.org/pypi/quickgui

যে কোনও সংখ্যক ইনপুট তৈরি করতে পারে (অনুপাত, চেকবক্স, ইনপুটবক্স), একক গুইতে স্বয়ংক্রিয়ভাবে সেগুলি সাজিয়ে তুলতে পারে।


0

সাম্প্রতিক একটি বার্তা বাক্স সংস্করণ হ'ল প্রম্পট_বক্স মডিউল। এটিতে দুটি প্যাকেজ রয়েছে: সতর্কতা এবং বার্তা। বার্তা আপনাকে বাক্সের উপর আরও বেশি নিয়ন্ত্রণ দেয়, তবে টাইপ করতে বেশি সময় নেয়।

সতর্কতার কোড উদাহরণ:

import prompt_box

prompt_box.alert('Hello') #This will output a dialog box with title Neutrino and the 
#text you inputted. The buttons will be Yes, No and Cancel

উদাহরণ বার্তা কোড:

import prompt_box

prompt_box.message('Hello', 'Neutrino', 'You pressed yes', 'You pressed no', 'You 
pressed cancel') #The first two are text and title, and the other three are what is 
#printed when you press a certain button

0

থ্রেডিং সহ সিটিপি মডিউল

আমি টিন্টার মেসেজবক্সটি ব্যবহার করছিলাম তবে এটি আমার কোডটি ক্র্যাশ করবে। আমি কেন এটির পরিবর্তে সিটিপস মডিউলটি ব্যবহার করেছি তা জানতে চাইনি

উদাহরণ স্বরূপ:

import ctypes
ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1)

আমি আরকেলেস থেকে এই কোড পেয়েছি


আমি পছন্দ করেছি যে এটি কোডটি ক্র্যাশ করে না তাই আমি এটিতে কাজ করেছি এবং একটি থ্রেডিং যুক্ত করেছি যাতে কোড পরে চলে run

আমার কোডের জন্য উদাহরণ

import ctypes
import threading


def MessageboxThread(buttonstyle, title, text, icon):
    threading.Thread(
        target=lambda: ctypes.windll.user32.MessageBoxW(buttonstyle, text, title, icon)
    ).start()

messagebox(0, "Your title", "Your text", 1)

বোতাম শৈলী এবং আইকন নম্বর জন্য:

## Button styles:
# 0 : OK
# 1 : OK | Cancel
# 2 : Abort | Retry | Ignore
# 3 : Yes | No | Cancel
# 4 : Yes | No
# 5 : Retry | No
# 6 : Cancel | Try Again | Continue

## To also change icon, add these values to previous number
# 16 Stop-sign icon
# 32 Question-mark icon
# 48 Exclamation-point icon
# 64 Information-sign icon consisting of an 'i' in a circle

0

আপনি ব্যবহার করতে পারেন pyautoguiবা pymsgbox:

import pyautogui
pyautogui.alert("This is a message box",title="Hello World")

ব্যবহার pymsgboxকরা ব্যবহারের মতোই pyautogui:

import pymsgbox
pymsgbox.alert("This is a message box",title="Hello World")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.