我是Python的新手,目前正在Tkinter中构建一个GUI界面,并为其提供完整的代码。我认为通过按下"输入"键盘上的按钮工作会很不错。键。
代码行是:win.bind('<Return>', testButton.functionName)
然后你就把#&#34; event&#34;在函数括号中functionName(event)
并且一切都很好。
问题是现在当你按下GUI界面内的按钮时它不起作用,这意味着我需要复制并重命名其中一个函数来同时拥有它们。
由于它是一个相同的代码,因此将它作为模块更有意义。但是,当我导入我的模块时,它似乎没有看到我的其余代码并声称我的变量不存在。
以下是我如何做的简化示例。
我的模块保存为moduleTest:
def test():
sum = a + b
return sum
主程序:
import moduleTest
a = 10
b = 12
moduleTest.test()
print test()
它一直声称没有定义a和b。
当我导入模块时,我明显误解了模块的工作原因,它只需导入整个代码并执行相同的操作:
import moduleTest
a = 10
b = 12
def test():
sum = a + b
return sum
print test()
我误解和做错了什么?
答案 0 :(得分:2)
Python全局变量是每个模块的全局变量,而不是整个程序。
解决这个问题的通常方法是不使用全局变量。
对于您的玩具示例,您可以def test(a, b):
然后从主模块中致电test(a, b)
,这通常是正确的解决方案,但它并不总是合适的。< / p>
其他选项包括:
main
和moduleTest
import thirdmodule
thirdmodule.a
可以.babelrc
访问。这通常适用于共享配置值等情况。答案 1 :(得分:1)
正如@abarnert所指出的,全局变量对每个模块都是全局的。为了解决这个问题,您可以使用:
def test(a, b):
sum = a + b
return sum
和
import moduleTest
a = 10
b = 12
print(moduleTest.test(a, b))
我想指出你不应该调用变量sum
,因为这已经是你要覆盖的现有函数。
答案 2 :(得分:0)
以下是我的代码的几个独立片段,可以为您提供一个想法:
item = "SNAKE"
oldString = "-" * (len(item))
blank = "-" * (len(item))
guesses = 10
def gameOn():
global guesses
global oldString
newString = ""
i = 0
x = len(item)
hanged = ""
readString = answerIn.get().upper()
winner = 1
if not readString:
if guesses == 10:
pass
else:
hanged = (HANGMAN[(len(HANGMAN) -1) - guesses])
hangedOutput.config(state=NORMAL)
hangedOutput.delete("1.0",END)
hangedOutput.insert(END,hanged)
hangedOutput.config(state=DISABLED)
error.config(state=NORMAL)
error.delete(0,END)
error.insert(0,"Please enter the value.")
error.config(state=DISABLED)
win = Tk()
answerIn = Entry(win,width = 3, border = 2)
answerIn.focus_set()
answerIn.grid(row=2, column=0, pady = 10, padx = 200, sticky = W)
win.mainloop()
当我把它变成一个模块时,它不仅要求item和oldString定义,还要求answerIn,hangedOutput等等,这些都是Tkinter标签的一部分。