0

TkInterを使用してGUIアプリを構築する方法を思い出すのに役立つ参照として、次のコードをさらに思いついた。Button1をクリックするか、コマンドオプションがself.helloに設定されている他のウィジェットを除いて、うまく動作します。以下のコードでわかるように、hello関数はプレースホルダーのようなものです。IDLEを介してスクリプトを実行している間はボタンのクリックは正常に機能しますが、実際のファイルtest.pywをダブルクリックしてプログラムを起動すると、アプリケーションが終了するだけです。私の質問は、なぜですか?

#Some guy somewhere

from tkinter import *

class Application:

    def hello(self):
        msg = messagebox.showinfo('Message Title','Message Body')

    def __init__(self, parent):
        parent.resizable(0,0)
        parent.minsize(800, 400)
        parent.title('Top Level')

        # Global Padding pady and padx
        pad_x = 0
        pad_y = 0


        # CASCADE MENU
        # create a parent menu.
        self.parentmenu1 = Menu(parent, tearoff=0)
        #self.menubar1.add_command(label='Menu1', command=self.hello)

        #create a child menu for parent menu.
        self.parentmenu1_child1 = Menu(parent, tearoff=0)
        self.parentmenu1_child1.add_command(label='Item1', command=self.hello)
        self.parentmenu1_child1.add_command(label='Item2', command=self.hello)
        self.parentmenu1_child1.add_command(label='Item3', command=self.hello)

        #add child menu to parent menu.
        self.parentmenu1.add_cascade(label='Menu1', menu=self.parentmenu1_child1)

        #self.menubar1.add_separator()

        # SINGLE MENU
        # create a parent menu.
        self.parentmenu1.add_command(label='Menu2', command=self.hello)

        # SINGLE MENU
        # create a parent menu.
        self.parentmenu1.add_command(label='Menu3', command=self.hello)

        # display the parent menu.
        parent.config(menu=self.parentmenu1)

        # Create controls

        #create label
        self.label1 = Label(parent, text='Label1')
        #create textbox
        self.textbox1 = Entry(parent)
        #create button
        self.button1 = Button(parent, text='Button1', command=self.hello)

        #string variable to hold checkbox1 values.
        self.str_checkbox1 = StringVar()        
        #create checkbox
        self.checkbox1 = Checkbutton(parent, text='Checkbox1', variable=self.str_checkbox1, onvalue='on1', offvalue='off1')
        #deselect checkbox1
        self.checkbox1.deselect()
        #string variable to hold checkbox2 values.
        self.str_checkbox2 = StringVar()    
        #create checkbox
        self.checkbox2 = Checkbutton(parent, text='Checkbox2', variable=self.str_checkbox2, onvalue='on2', offvalue='off2')
        #deselect checkbox2
        self.checkbox2.deselect()

        #???? ..what sets the groupbox apart from others. primary key???!!
        self.str_radiobutton1 = StringVar()
        #command= parameter missing.
        self.radiobutton1 = Radiobutton(parent, text='Radio 1', variable=self.str_radiobutton1, value='a')
        self.radiobutton2 = Radiobutton(parent, text='Radio 2', variable=self.str_radiobutton1, value='b')
        self.radiobutton1.select()

        #create a list of options.
        optionList = ('Option1', 'Option2', 'Option3')
        #string variable to hold optionlist values.
        self.str_optionmenu1 = StringVar()
        #associate string variable with optionlist
        self.str_optionmenu1.set(optionList[0])
        #create optionmenu
        self.optionmenu1 = OptionMenu(parent, self.str_optionmenu1, *optionList)

        #create a frame
        self.frame1 = Frame(parent)
        #create a text.
        self.textarea1 = Text(self.frame1, width=20, height=10)
        #align text left and fill frame with it.
        self.textarea1.pack(side=LEFT, fill=Y)
        #create a scrollbar.
        self.scrollbar1 = Scrollbar(self.frame1)
        #align scrollbar right and fill frame with it.
        self.scrollbar1.pack(side=RIGHT, fill=Y)
        #what is going to be scrolled?
        self.scrollbar1.config(command=self.textarea1.yview)
        #set textarea scrollbar.
        self.textarea1.config(yscrollcommand=self.scrollbar1.set)
        #align frame left and fill.
        self.frame1.pack(side=LEFT, fill=Y)

        #create a frame
        self.frame2 = Frame(parent)
        #create a text.
        self.listbox1 = Listbox(self.frame2, width=20, height=10, activestyle='none', selectmode=SINGLE)
        #create a list of items.
        optionList = ('Item1', 'Item2', 'Item3', 'Item4', 'Item5', 'Item6', 'Item7', 'Item8', 'Item9', 'Item10', 'Item11')
        #add items from list to listbox
        for item in optionList:
            self.listbox1.insert(END, item)
        #align text left and fill frame with it.
        self.listbox1.pack(side=LEFT, fill=Y)
        #create a scrollbar.
        self.scrollbar2 = Scrollbar(self.frame2)
        #align scrollbar right and fill frame with it.
        self.scrollbar2.pack(side=RIGHT, fill=Y)
        #what is going to be scrolled?
        self.scrollbar2.config(command=self.listbox1.yview)
        #set textarea scrollbar.
        self.listbox1.config(yscrollcommand=self.scrollbar2.set)
        #align frame left and fill.
        self.frame2.pack(side=LEFT, fill=Y)


        # Place controls inside of grid
        self.label1.grid(row=0, column=0, padx=pad_x, pady=pad_y, sticky=W)
        self.textbox1.grid(row=0, column=1, padx=pad_x, pady=pad_y, sticky=W)
        self.button1.grid(row=1, column=0, padx=pad_x, pady=pad_y, sticky=W)
        self.checkbox1.grid(row=1, column=1, padx=pad_x, pady=pad_y, sticky=W)
        self.checkbox2.grid(row=1, column=2, padx=pad_x, pady=pad_y, sticky=W)
        self.optionmenu1.grid(row=2, column=0, padx=pad_x, pady=pad_y, sticky=W)
        self.frame1.grid(row=2, column=1, padx=pad_x, pady=pad_y, sticky=W)        
        self.radiobutton1.grid(row=3, column=0, padx=pad_x, pady=pad_y, sticky=W)
        self.radiobutton2.grid(row=3, column=1, padx=pad_x, pady=pad_y, sticky=W)
        self.frame2.grid(row=4, column=0, padx=pad_x, pady=pad_y, sticky=W)

if __name__ == '__main__':
    parent = Tk()
    app = Application(parent)
    parent.mainloop()
4

1 に答える 1

0

大丈夫。どうやらtkMessageBoxはPython3.xでmessageboxに名前が変更されました。また、このモジュールはtkinterでは利用できないため、開発者が以下を使用する場合でも、次のようになります。

from tkinter import *

..彼/彼女はまだする必要があります:

from tkinter import messagebox
于 2013-03-25T17:18:27.133 に答える