簡體   English   中英

從 Tkinter 獲取文本框條目數據

[英]getting text box entry data from Tkinter

我正在使用 TKinter 制作一個界面,該界面將接收用戶名、密碼和 Web 鏈接。

我在將輸入框變量輸入到我的全局變量中時遇到問題。 我收到 NameError: name 'userEntry' 未定義

我試過打電話給自己。 和 init_window 和 append。但我真的在黑暗中摸索,這是我第一次為 tkinter 使用 Window(Frame) 類,所以我不確定我搞砸了什么。

- - - - - - - - - - - 編輯 - - - - - - - - - - - - - - -------------------------------

我想借此從文本數據init_window(self) ,並使用數據runProgram(self)作為硒的變量。 但我無法讓數據傳輸過來。

data = []
userName= []
password=[]
link=[]

class Window(Frame):

     def __init__(self, master=None):
         Frame.__init__(self, master)                 
         self.master = master
         self.init_window()

    #Creation of init_window
     def init_window(self):

        self.master.title("Comment uploader") # changing the title of our master widget         

        userEntry= Entry(root, textvariable=userName)
        passEntry = Entry(root, textvariable=password, show='*')
        linkEntry= Entry(root, textvariable=link)
        openButton = Button(root, text="Open CSV", command=self.fileOpen) # creating a button instance
        goButton = Button(root, text="Run program", command=self.runProgram)

        userEntry.grid(row=0, column=2,sticky=W)
        passEntry.grid(row=1, column=2,sticky=W)
        linkEntry.grid(row=2, column=2,sticky=W) 
        openButton.grid(row=3, column=2, sticky=W)  
        goButton.grid(row=4, column=2, sticky=W)

        label_1= Label(root,text="User Name:" ,font="Times 14")
        label_2= Label(root,text="Password:" ,font="Times 14")
        label_3= Label(root,text="input link" ,font="Times 14")
        label_4= Label(root,text="Open CSV" ,font="Times 14")
        label_5= Label(root,text="Sart the program" ,font="Times 14")

        label_1.grid(row=0 , column=1, sticky=W)
        label_2.grid(row=1 , column=1, sticky=W)
        label_3.grid(row=2 , column=1, sticky=W)
        label_4.grid(row=3 , column=1, sticky=W)
        label_5.grid(row=4 , column=1, sticky=W) 

     def runProgram(self):
          userName = userEntry.get()

          print(userName)
          print(data[1])

要訪問未在其中創建的函數中的變量,您應該將該變量設為實例變量:

self.userEntry = Entry(self.master, textvariable=userName)

這適用於類內共享的所有對象。 例如; 您不需要共享條目userEntry因為您有一個與條目關聯的文本變量,但您必須共享文本變量。

這是使用我認為您的目標使用實例變量的程序的重寫:

from tkinter import *

class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)                 
        self.master = master
        self.data = []
        self.userName = StringVar() # StringVar to hold userEntry content
        self.password = StringVar() # etc, etc.
        self.link = StringVar()
        self.init_window()          # Build GUI

    #Creation of init_window
    def init_window(self):
        self.master.title("Comment uploader") # changing the title of our master widget         

        userEntry= Entry(self.master, textvariable=self.userName)
        passEntry = Entry(self.master, textvariable=self.password, show='*')
        linkEntry= Entry(self.master, textvariable=self.link)
        openButton = Button(self.master, text="Open CSV", command=self.fileOpen) # creating a button instance
        goButton = Button(self.master, text="Run program", command=self.runProgram)

        userEntry.grid(row=0, column=2,sticky=W)
        passEntry.grid(row=1, column=2,sticky=W)
        linkEntry.grid(row=2, column=2,sticky=W) 
        openButton.grid(row=3, column=2, sticky=W)  
        goButton.grid(row=4, column=2, sticky=W)

        label_1= Label(root,text="User Name:" ,font="Times 14")
        label_2= Label(root,text="Password:" ,font="Times 14")
        label_3= Label(root,text="input link" ,font="Times 14")
        label_4= Label(root,text="Open CSV" ,font="Times 14")
        label_5= Label(root,text="Sart the program" ,font="Times 14")

        label_1.grid(row=0 , column=1, sticky=W)
        label_2.grid(row=1 , column=1, sticky=W)
        label_3.grid(row=2 , column=1, sticky=W)
        label_4.grid(row=3 , column=1, sticky=W)
        label_5.grid(row=4 , column=1, sticky=W)

    def fileOpen(self): # Placeholder for button callback
        pass

    def runProgram(self):
        userName = self.userName.get()
        print(userName)
        #print(self.data[1])    # The list self.data is empty...

root = Tk()
app = Window(root)
root.mainloop()

暫無
暫無

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

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