如何在另一个def中使用.get()tkinter?蟒蛇

时间:2017-04-11 16:28:13

标签: python function tkinter get

我的问题是我需要从输入框中获取信息,从另一个def获取整数。但我总是遇到输入框内没有参数的问题,或者我无法将字符串转换为整数。

from tkinter import *
import os.path
import sys
import logging
#import mainloop
import main_draw_window
Size_Format="px"
def div_edit_window():
    edit_window = Tk()
    edit_window.title(main_draw_window._Projekt_Name+": DIV Editor")
    div_size_format_changer_bt = Button(edit_window, text="It is "+Size_Format, command=div_change)
    div_ending_x_ent = Entry(edit_window)
    div_ending_y_ent = Entry(edit_window)
    div_ending_accept = Button(edit_window, text="Accept", command=div_ending_set)
    div_size_format_changer_bt.pack()
    div_ending_x_ent.pack()
    div_ending_y_ent.pack()
    div_ending_accept.pack()
    edit_window.mainloop()

def div_ending_set():
    div_ending_x = int(div_edit_window.div_ending_x_ent.get())
    div_ending_y = int(div_edit_window.div_ending_y_ent.get())
    print(div_ending_x)
    print(div_ending_y)

感谢您的帮助;)

1 个答案:

答案 0 :(得分:1)

问题在于我在another answer of mine中讨论过的Python范围。

Kevin所述,您可以使用全局声明:

global foo

这是不鼓励的, global的最佳用途是global ,所以我不会解释它是如何工作的。

实现这项工作的另一种方法是使用类。在类中,def可以使用其他函数的定义,只需要你想要的。通常,您无法在函数之间使用它们,例如,这会引发错误:

def foo1():
    string = 'x'
def foo2():
    print(string)

foo1() #You would expect this to define the string
foo2() #So this can print it... but no.

但这会奏效:

class foo:
    def foo1(self):
        self.string = 'x'
    def foo2(self):
        print(self.string)

MyClass = foo()

MyClass.foo1()
MyClass.foo2()

每行说明:

首先,这一行:

MyClass = foo()

这实际上是在做什么叫做班级的实例。这将允许从以下位置访问实例中定义的每个变量,函数或其他内容:

  • 使用MyClass.varMyClass.var()等在同一个实例之外,甚至在课堂之外或任何课程之外
  • 从实例中,使用self.varself.var()

以这种方式考虑这些:A是一个类的实例,它有一个方法foo()和一个方法bar()。代码foo()中的某处调用bar()。如果您想在代码中的任何位置使用foo()调用A函数,请使用:A.foo()。如果您有另一个实例,B然后拨打B' foo()您使用B.foo(),依此类推。当来自任何实例的foo()从同一实例调用bar()时,代码行为self.bar()。因此,self表示类的任何实例。

其他行

  1. 这类似于定义一个函数,你告诉Python下一个缩进行属于一个类(而不是一个函数)
  2. 定义一个没有参数的函数(自我是必须的,there is a reason for this
  3. string = 'x'适用于此课程的每个实例
  4. 与2相同。
  5. 在屏幕中显示相应的(带有实例)字符串x
  6. 然后实例化该类,并调用foo1()foo2()

    现在您可以将这些知识用于修复代码。如果有什么不清楚,我会编辑我的问题。