我正在继续那个加密程序,现在我正在为它开发GUI。不过,我有一个奇怪的问题:在主菜单中,我有调用加密和解密子程序的按钮,但它们显然是在按下按钮之前执行的。你知道吗
你知道吗定义.py你知道吗
#!/usr/bin/env python2.7
#-*- encoding: utf-8 -*
from Tkinter import *
import decoding
import encoding
version="v0.0"
def NewLabel(text, column, row, self):
label=Label(self, text=text)
label.grid(column=column,row=row)
def NewButton(text, action, column, row, self, sticky="N"):
button=Button(self, text=text, command=action)
button.grid(column=column,row=row,sticky=sticky)
def OnEncode():
zxc.encode() #zxc is the new encode
quit()
def OnDecode():
decoding.decode(version)
def OnExit():
quit()
你知道吗欢迎.py你知道吗
#!/usr/bin/env python2.7
#-*- encoding: utf-8 -*
from Tkinter import *
from definitions import *
import encoding
import decoding
import zxc
main_window=Tk()
mainContainer=Frame(main_window)
NewLabel(u'Welcome to <name> GUI alpha v0.0',0,0,mainContainer)
NewLabel(u'What do you want to do?',0,1,mainContainer)
NewButton(u'1. Encrypt file',OnEncode,0,2,mainContainer)
NewButton(u'2. Decrypt file',OnDecode,0,3,mainContainer)
NewButton(u'Exit',OnExit,0,4,mainContainer)
mainContainer.pack()
main_window.title('<name> GUI')
main_window.mainloop()
你知道吗zxc.py公司你知道吗
#!/usr/bin/env python2.7
#-*- encoding: utf-8 -*
from definitions import *
class encode(Tk):
def __init__(self,parent):
Tk.__init__(self,parent)
self.parent=parent
self.initialize()
def harden(number):
if number<=80: number=53
elif number>=100: number=((1/2)*number+50)
elif 82<number<100: number=((number**2-4)*(number**2-1))/number
return number
def initialize(self):
NewLabel('Welcome to <name> GUI v0.0 encoder',0,0,self)
app=encode(None)
app.title('<name> GUI v0.0 encoder')
app.mainloop()
我从中得到的是第一个“欢迎使用guiv0.0编码器”窗口,在我关闭之后,会出现带有按钮的“欢迎使用guialphav0.0”
导入模块时,该模块中的所有代码都将执行。通常,“executed”表示模块中的所有函数和变量都已定义。但是,如果在模块中包含可执行代码,它将执行。你知道吗
就你而言,zxc.py公司底部有创建一些窗口的代码。因为你没有通过说“不要在导入时运行这个”来保护代码,所以它在导入时运行。你知道吗
为了防止代码运行,通常将其隐藏在if语句后面,如下所示:
执行导入时,
__name__
永远不会设置为文字字符串"__main__"
。它只在您尝试直接执行脚本时设置。你知道吗这就是
if __name__ == "__main__"
的目的。你知道吗看看这个帖子提供的答案:What does if __name__ == "__main__": do?
让我们简化一下。。。你知道吗
你有一个叫做。。。比如说。。。
libmain.py
(一个很不幸的名字,但是。。。meh)作为库(可以导入到某处的模块)和应用程序主入口点。你知道吗让我们把它变得非常简单:让
libmain.py
文件只打印__name__
:libmain.py文件:
现在,创建另一个只导入
libmain
的文件(foo.py
):foo.py公司
如果直接执行
python ./libmain.py
,将得到以下输出:Current __name__: __main__
然而,如果执行导入libmain(
python ./foo.py
)的文件,您将得到:Current __name__: libmain
因此,为了避免在导入
libmain.py
时执行代码,请将该代码放在if __name__ == "__main__"
下(因为,如上面的示例所示,导入libmain
时,__name__
将是libmain
)在您的特定情况下,在不了解详细情况的情况下,我会说您正在导入
welcome
(或zxc
?)在某个地方,这就是导致代码被执行的原因。你知道吗相关问题 更多 >
编程相关推荐