programing

파이썬에서 간단한 메시지 상자를 만들려면 어떻게 해야 합니까?

powerit 2023. 6. 7. 23:22
반응형

파이썬에서 간단한 메시지 상자를 만들려면 어떻게 해야 합니까?

자바스크립트에서 alert()와 같은 효과를 찾고 있습니다.

저는 오늘 오후에 트위스트 웹을 사용하여 간단한 웹 기반 통역기를 작성했습니다.기본적으로 폼을 통해 Python 코드 블록을 제출하면, 클라이언트가 와서 그것을 잡고 실행합니다.매번 (코드가 양식을 통해 제출되었다가 사라지기 때문에) 보일러 플레이트 wxPython 또는 Tkinter 코드 전체를 다시 작성할 필요 없이 간단한 팝업 메시지를 만들 수 있기를 원합니다.

해봤습니다tkMessageBox:

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

Tkinter 아이콘이 있는 다른 창이 백그라운드에서 열립니다.난 이것을 원하지 않는다.저는 간단한 wxPython 코드를 찾고 있었지만, 그것은 항상 클래스를 설정하고 애플리케이션 루프를 입력해야 했습니다.파이썬에서 메시지 상자를 만드는 간단하고 캐치프리한 방법이 없을까요?

가져오기 및 단일 라인 코드를 다음과 같이 사용할 수 있습니다.

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

또는 다음과 같은 함수(Mbox)를 정의합니다.

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 | Cancel 
##  6 : Cancel | Try Again | Continue

재미있게 보내!

참고: 사용하도록 편집됨MessageBoxW대신에MessageBoxA

이지귀 봤어요?

import easygui

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

당신이 제시한 코드는 괜찮습니다!다음 코드를 사용하여 "배경의 다른 창"을 명시적으로 만들고 숨기기만 하면 됩니다.

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

메시지 상자 바로 앞에 있습니다.

또한 취소하기 전에 다른 창을 배치하여 메시지를 배치할 수 있습니다.

#!/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!")

PyMsgBox 모듈은 정확히 이를 수행합니다.JavaScript의 명명 규칙인 alert(), confirm(), prompt() 및 password()를 따르는 메시지 상자 기능이 있습니다(이것은 프롬프트()이지만 입력할 때 *를 사용함).이러한 함수 호출은 사용자가 확인/취소 버튼을 클릭할 때까지 차단됩니다.Tkinter 이외의 종속성이 없는 크로스 플랫폼 순수 파이썬 모듈입니다.

설치 대상: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/ 에서 확인할 수 있습니다.

사용:

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)

다음을 제공합니다.

여기에 이미지 설명 입력

Windows에서는 ctypes를 user32 라이브러리와 함께 사용할 수 있습니다.

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")

Mac에서 Python 표준 라이브러리에는 다음과 같은 모듈이 있습니다.EasyDialogsEasyDialogs for Windows 46691.0에는 (ctypes 기반) Windows 버전도 있습니다.

하다면: 은 이미 처럼 네이티브 easygui기능이 별로 없을 수도 있습니다.

사용할 수 있습니다.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")

최근 메시지 상자 버전은 prompt_box 모듈입니다.경보 및 메시지의 두 가지 패키지가 있습니다.메시지를 사용하면 상자를 더 잘 제어할 수 있지만 입력하는 데 시간이 더 오래 걸립니다.

예: 경고 코드:

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

또한 취소하기 전에 다른 창을 배치하여 메시지를 배치할 수 있습니다.

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!")

참고:이것은 루이스 카울스의 대답입니다. 파이썬 2 이후로 tkinter가 바뀌었기 때문에 파이썬 3이 확인되었습니다.코드를 백워드 호환으로 만들려면 다음과 같은 작업을 수행합니다.

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

기존 프로그램에 메시지 상자를 추가해야 했습니다.이 경우 대부분의 답변은 지나치게 복잡합니다.Ubuntu 16.04(Python 2.7.12)에서 Ubuntu 20.04의 향후 기능을 지원하는 Linux의 경우 다음과 같은 코드가 있습니다.

프로그램 상단

from __future__ import print_function       # Must be first import

try:
    import tkinter as tk
    import tkinter.ttk as ttk
    import tkinter.font as font
    import tkinter.filedialog as filedialog
    import tkinter.messagebox as messagebox
    PYTHON_VER="3"
except ImportError: # Python 2
    import Tkinter as tk
    import ttk
    import tkFont as font
    import tkFileDialog as filedialog
    import tkMessageBox as messagebox
    PYTHON_VER="2"

실행 중인 파이썬 버전에 관계없이 코드는 항상messagebox.나중에 교정하거나 이전 버전과의 호환성을 보장합니다.위의 기존 코드에 두 줄만 삽입하면 되었습니다.

상위 창 지오메트리를 사용하는 메시지 상자

''' At least one song must be selected '''
if self.play_song_count == 0:
    messagebox.showinfo(title="No Songs Selected", \
        message="You must select at least one song!", \
        parent=self.toplevel)
    return

곡 수가 0이면 반환할 코드가 이미 있습니다.그래서 기존 코드 사이에 세 줄만 삽입하면 되었습니다.

대신 상위 창 참조를 사용하여 복잡한 지오메트리 코드를 사용할 수 있습니다.

parent=self.toplevel

프로그램을 시작한 후 상위 창을 이동한 경우 메시지 상자가 예측 가능한 위치에 계속 표시됩니다.

사용하다

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

마스터 창을 먼저 만들어야 합니다.이것은 Python 3을 위한 것입니다.이것은 wxPython을 위한 것이 아니라 Tkinter를 위한 것입니다.

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

나사산이 있는 ctype 모듈

저는 Tkinter 메시지 상자를 사용하고 있었지만, 그것은 제 코드를 손상시킬 것입니다.저는 그 이유를 알고 싶지 않아서 대신 ctypes 모듈을 사용했습니다.

예:

import ctypes

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

아르켈리스한테서 코드를 받았어요


코드가 충돌하지 않는 것이 마음에 들어 작업을 했고 그 이후 코드가 실행되도록 스레드를 추가했습니다.

내 코드 예제

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

시간 내에 클릭하지 않으면 종료되는 메시지 상자를 원하는 경우:

import win32com.client

WshShell = win32com.client.DispatchEx("WScript.Shell")

# Working Example BtnCode = WshShell.Popup("Next update to run at ", 10, "Data Update", 4 + 32)

# discriptions BtnCode = WshShell.Popup(message, delay(sec), title, style)

내 파이썬 모듈 QuickG를 확인하십시오.UI:pip install quickgui에 대한 하지 않습니다 (wxPython 필요 wxPython 대한필않요다식니습지하은에지하지이만)▁(다않x▁of니(it습x요x지에▁requiresw▁w하필▁w은▁but▁knowledge▁it식,x▁anyt)

원하는 수의 입력(비율, 확인란 및 입력 상자)을 생성하고 단일 GUI에서 자동으로 정렬할 수 있습니다.

최고는 아니지만, 여기 Tkinter만 사용하는 나의 기본 메시지 상자가 있습니다.

# 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 the main window

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

if __name__ == '__main__':

Return = MsgBox( # Use it like this:
    'Basic Error Example',

    ''.join([
        'The basic error example 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

언급URL : https://stackoverflow.com/questions/2963263/how-can-i-create-a-simple-message-box-in-python

반응형