tkinter python 3 примеры




Как создать простой ящик сообщений в Python? (8)

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

Я ищу тот же эффект, что и alert() в JavaScript.

Сегодня вечером я написал простой веб-переводчик, используя Twisted.web. Вы в основном представляете блок кода Python через форму, и клиент приходит и захватывает его и выполняет его. Я хочу, чтобы иметь возможность создавать простые всплывающие сообщения, без необходимости переписывать целую кучу шаблонов wxPython или TkInter каждый раз (поскольку код передается через форму и затем исчезает).

Я пробовал tkMessageBox:

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

но это открывает другое окно в фоновом режиме с помощью значка tk. Я не хочу этого. Я искал простой код wxPython, но он всегда требовал установки класса и ввода цикла приложения и т. Д. Нет ли простого, свободного метода создания окна сообщений в Python?


Вы можете использовать код импорта и одиночной строки следующим образом:

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

Повеселись!

Примечание: отредактировано для использования MessageBoxW вместо MessageBoxA


Код, который вы представили, в порядке! Вам просто нужно явно создать «другое окно в фоновом режиме» и скрыть его с помощью этого кода:

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

Прямо перед вашим сообщением.


Модуль PyMsgBox выполняет именно это. Он имеет функции окна сообщений, которые соответствуют соглашениям об именах JavaScript: alert (), confirm (), prompt () и password () (который является приглашением (), но использует * при вводе). Эти функциональные вызовы блокируются до тех пор, пока пользователь не нажмет кнопку «ОК / Отмена». Это кросс-платформенный, чистый модуль Python без зависимостей.

Установить с помощью: 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/


Не самое лучшее, вот мой основной ящик сообщений, используя только 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 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
"""

Также вы можете поместить другое окно, прежде чем снимать его, чтобы вы позиционировали свое сообщение

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

проверьте мой модуль python: pip install quickgui (Требуется wxPython, но не требует знания wxPython) https://pypi.python.org/pypi/quickgui

Может создавать любые количества входов, (соотношение, флажок, входное поле), автоматически размещать их на одном gui.


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)

даст this .





tkinter