簡體   English   中英

無法在Tkinter中獲得Entry Widget的價值

[英]Can't get value of Entry Widget in Tkinter

我想在Tkinter GUI中檢索我的Entry小部件的值(文件名),並在我的file_open函數中使用它來獲取文件名,讀取它,然后將內容返回到我的Text小部件中。

但是我收到一個屬性錯誤,說Application對象沒有屬性f3_entry(盡管我創建了分配給f3_entry的條目小部件)。 我在這里做錯了什么?

from tkinter import *
from tkinter.filedialog import LoadFileDialog, SaveFileDialog, Directory


class Application(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.master.title("Grid layout")
        self.createWidgets()


    def createWidgets(self):
        def handler(event):
            print("Frame {} clicked at {} {}".format(event.widget, event.x, event.y))

        for r in range(6):
            self.master.rowconfigure(r, weight=1)  
        for c in range(6):
            self.master.columnconfigure(c, weight=1)

        Frame1 = Frame(self.master, bg="red", name='frame 1')
        Frame1.grid(row=0, column=0, rowspan=3, columnspan=3, sticky=W+E+N+S)
        Frame1.bind("<Button-1>", handler)

        Frame2 = Frame(self.master, bg="green", name='frame 2')
        Frame2.grid(row=3, column=0, rowspan=3, columnspan=3, sticky=W+E+N+S)
        Frame2.bind("<Button-1>", handler)

        Frame3 = Frame(self.master, bg="blue", name='frame 3')
        Frame3.grid(row=0, column=3, rowspan=6, columnspan=4, sticky=W+E+N+S)

        f3_entry = Entry(Frame3).pack(fill=BOTH)
        f3_text = Text(Frame3).pack(fill=BOTH)

        r_button = Button(self.master, text="Red").grid(row=6,column=1,sticky=E+W)
        b_button = Button(self.master, text="Blue").grid(row=6,column=2,sticky=E+W)
        g_button = Button(self.master, text="Green").grid(row=6,column=3,sticky=E+W)
        bk_button = Button(self.master, text="Black").grid(row=6,column=4,sticky=E+W)
        o_button = Button(self.master, text="Open", command=self.file_open).grid(row=6,column=5,sticky=E+W) 

    def file_open(self):
        d = LoadFileDialog(self)
        fname = self.f3_entry.get()
        if fname is None:
            print("No file exists...")
        else:
            f = open(fname, 'r').read()
            f3_text.insert(f)
            f.close()

root = Tk()
app = Application(master=root)
app.mainloop()

您僅在createWidgets()方法中創建了局部變量 f3_entry而不是屬性。 您想添加一個self. 前面的參考:

self.f3_entry = Entry(Frame3)
self.f3_entry.pack(fill=BOTH)

這實際上會在您的Application實例上創建一個屬性,然后可以在file_open()方法中進行引用。

請注意,您需要調用.pack() 分開的方法; 該方法返回None ,因此您需要在調用它之前先將Entry()對象存儲在屬性中。

f3_text小部件也是如此; 您需要在createWidgets()file_open()都將其視為屬性:

# in createWidgets
self.f3_text = Text(Frame3)
self.f3_text.pack(fill=BOTH)

# ...

# in file_open
self.f3_text.insert(f)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM