1

This is what i tried so far to get the user's input:

master = Tk()
master.title('Title')

v = StringVar()

L1 = Label(master, text = 'Name')
L1.pack(side = LEFT)

E1 = Entry(master, textvariable = v, bd = 5)
E1.pack(side = RIGHT)

def userinput():
    a = raw_input(v.get())
    print a


b = Button(master, text = 'Submit', command = userinput)
b.pack(side = BOTTOM)


master.mainloop()

The real question is, how can i store the v.get() raw_input into a variable outside the function? Thx!

4

4 回答 4

0

正如其他人所说 - 使用globe

使用类的示例

from Tkinter import *

class MainWindow():

    def __init__(self, master):
        self.master = master

        self.master.title('Title')

        self.v = StringVar()

        self.L1 = Label(self.master, text = 'Name')
        self.L1.pack(side = LEFT)

        self.E1 = Entry(self.master, textvariable = self.v, bd = 5)
        self.E1.pack(side = RIGHT)

        self.B1 = Button(self.master, text = 'Submit', command = self.userinput)
        self.B1.pack(side = BOTTOM)

        self.B2 = Button(self.master, text = 'Print', command = self.print_external_variable)
        self.B2.pack(side = TOP)

    #------------------

    def userinput(self):
        global external_variable

        external_variable = raw_input(self.v.get())
        #external_variable = self.v.get()

        print "inside - userinput:", external_variable

    #------------------

    def print_external_variable(self):
        # you don't need global if you don't change external_variable

        print "inside - print:", external_variable

#----------------------------------------------------------------------

external_variable = '- none -'

print "before run:", external_variable

master = Tk()
MainWindow(master)
master.mainloop()

print "after run:", external_variable
于 2013-11-07T17:57:53.967 回答
0

您可以创建一个全局变量来保存输入:

inp = None

然后让您的函数更新该变量:

def userinput():
    global inp
    a = raw_input(v.get())
    print a
    inp = a

因此,您的代码将如下所示:

master = Tk()
master.title('Title')

v = StringVar()

# Variable to hold the input
inp = None

L1 = Label(master, text = 'Name')
L1.pack(side = LEFT)

E1 = Entry(master, textvariable = v, bd = 5)
E1.pack(side = RIGHT)

def userinput():
    # Declare 'inp' to be global
    global inp
    a = raw_input(v.get())
    print a
    # Update the variable
    inp = a


b = Button(master, text = 'Submit', command = userinput)
b.pack(side = BOTTOM)


master.mainloop()

在上面的代码中,inp将始终是输入的新副本,您可以在代码的其他地方使用它。

但是,将代码变成一个类可能是值得的。这样,您可以拥有一个名为的类属性self.inp,而不必这样做global inp

于 2013-11-07T17:36:53.437 回答
0

首先,raw_input当您可以对小部件执行相同操作时,为什么还要使用输入entry

遵循上述做法有几个缺点:

  • raw_input将导致整个 python 解释器暂停,但entry小部件不会这样做。
  • raw_input不能定制或者定制有点困难,但是我们可以很容易地为entry小部件做到这一点。
  • 如果在button没有输入数据的情况下再次按下raw_input,它会引发错误,但在entry小部件中不会。

对于您的问题的解决方案,有 3 种方法。

方法一:

  • 是更新textvariable值,然后您可以使用v.get(). (最好的
def userinput():
    a = raw_input(v.get())
    v.set(a)
# This would also cause an update in entry widget.

方法二:

  • 是在函数内部使用global关键字并将raw_input's 的数据存储到全局变量中。
def userinput():
    global data
    data = raw_input(v.get())

方法3:

  • 是更新text按钮或输入框的值,然后您可以使用b.cget("text"). (更改文本值实际上没有用,但仍然是一种方法。
def userinput():
    a = raw_input(v.get())
    b.config(text=a)

我建议你使用方法1。

于 2022-02-27T17:41:32.070 回答
-2

让它返回用户输入

def userinput():
    a = raw_input(v.get())
    return a

然后,当您调用它时,您可以通过以下方式执行此操作:

myvar=userinput()

现在,myvar包含用户输入的值。

于 2013-11-07T17:36:16.327 回答