получение данных ввода текстового поля от Tkinter - PullRequest
0 голосов
/ 04 ноября 2018

Я использую TKinter для создания интерфейса, который будет принимать имя пользователя, пароль, веб-ссылку.

У меня проблемы с получением переменной ввода для моей глобальной переменной. Я получаю NameError: имя 'userEntry' не определено

Я пытался назвать себя. И init_window, и append. Но я действительно бреду в темноте, я впервые использую класс Window (Frame) для tkinter, поэтому я не совсем уверен, что я облажался.

---------------------- Редактировать ------------------------ ----------------------------------

Я хочу взять текстовые данные из 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])

1 Ответ

0 голосов
/ 04 ноября 2018

Чтобы получить доступ к переменной в функции, в которой она не создана, необходимо сделать переменную экземпляром переменной:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...