web-dev-qa-db-ja.com

tkinterでポップアップウィンドウを作成するにはどうすればよいですか?

プログラムのポップアップウィンドウの作成に問題があります。

コード:

from tkinter import *
from tkinter import ttk
import tkinter as tk

def popupBonus():
    popupBonusWindow = tk.Tk()
    popupBonusWindow.wm_title("Window")
    labelBonus = Label(popupBonusWindow, text="Input")
    labelBonus.grid(row=0, column=0)
    B1 = ttk.Button(popupBonusWindow, text="Okay", command=popupBonusWindow.destroy())
    B1.pack()

class Application(ttk.Frame):
    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        mainwindow = ttk.Frame(self)

        self.buttonBonus = ttk.Button(self, text="Bonuses", command=popupBonus)
        self.buttonBonus.pack()

コードはボタン付きのウィンドウを生成し、ボタンを押すと、タイトルが「ウィンドウ」、テキストが「入力」のポップアップウィンドウを生成し、ポップアップウィンドウを終了してメインウィンドウに戻るには「OK」というボタンが表示されます。 。ただし、このエラーが発生します。

 Traceback (most recent call last):
  File "D:\Softwares\Python 3.6.0\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
  File "C:\Users\J---- M--\Desktop\Python\GUI-Messagebox 5.py", line 12, in popupBonus
B1 = ttk.Button(popupBonusWindow, text="Okay", command=popupBonusWindow.destroy())
  File "D:\Softwares\Python 3.6.0\lib\tkinter\ttk.py", line 614, in __init__
Widget.__init__(self, master, "ttk::button", kw)
  File "D:\Softwares\Python 3.6.0\lib\tkinter\ttk.py", line 559, in __init__
tkinter.Widget.__init__(self, master, widgetname, kw=kw)
  File "D:\Softwares\Python 3.6.0\lib\tkinter\__init__.py", line 2293, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: NULL main window

何が問題なのかわかりません。私は4時間答えを見つけようとして、基本的にあきらめました。

また、感嘆符の画像が不要で、後でポップアップウィンドウ内に複数のチェックボックスを含めたいので、tkinterのメッセージボックス機能を使用したくありません。

5
Jason M

3つの間違いを見つけました

  • Toplevel()の代わりにTk()を使用して、2番目/ 3番目のウィンドウを作成します
  • _command=_はコールバックを期待しています-_()_のない関数名
    (ただし、popupBonusWindow.destroy()を使用します)
  • 1つのウィンドウまたはフレームでpack()grid()を混在させないでください
    (ただし、ポップアップでgrid()およびpack()を使用します)

しかし、showinfo()のような組み込みのメッセージボックスを使用することもできます

_import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo

def popup_bonus():
    win = tk.Toplevel()
    win.wm_title("Window")

    l = tk.Label(win, text="Input")
    l.grid(row=0, column=0)

    b = ttk.Button(win, text="Okay", command=win.destroy)
    b.grid(row=1, column=0)

def popup_showinfo():
    showinfo("Window", "Hello World!")

class Application(ttk.Frame):

    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.pack()

        self.button_bonus = ttk.Button(self, text="Bonuses", command=popup_bonus)
        self.button_bonus.pack()

        self.button_showinfo = ttk.Button(self, text="Show Info", command=popup_showinfo)
        self.button_showinfo.pack()

root = tk.Tk()

app = Application(root)

root.mainloop()
_

BTW:ページに配置します: Tkinter:ポップアップウィンドウまたはメッセージボックスの作成方法

12
furas