我的问题是我需要从输入框中获取信息,从另一个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)
感谢您的帮助;)
答案 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.var
,MyClass.var()
等在同一个实例之外,甚至在课堂之外或任何课程之外self.var
,self.var()
等以这种方式考虑这些:A
是一个类的实例,它有一个方法foo()
和一个方法bar()
。代码foo()
中的某处调用bar()
。如果您想在代码中的任何位置使用foo()
调用A
函数,请使用:A.foo()
。如果您有另一个实例,B
然后拨打B
' foo()
您使用B.foo()
,依此类推。当来自任何实例的foo()
从同一实例调用bar()
时,代码行为self.bar()
。因此,self
表示类的任何实例。
string = 'x'
适用于此课程的每个实例x
。然后实例化该类,并调用foo1()
和foo2()
现在您可以将这些知识用于修复代码。如果有什么不清楚,我会编辑我的问题。