我将继续使用该加密程序,现在正在为其开发GUI。但是,我有一个奇怪的问题:在主菜单中,我有一些按钮可以调用加密和解密子程序,但是显然在按下按钮之前它们就在执行。
definitions.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()
welcome.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()
我从中得到的是第一个“欢迎使用GUI v0.0编码器”窗口,并且在我关闭带有按钮的“欢迎使用GUI alpha v0.0”之后,出现了
最佳答案
这就是if __name__ == "__main__"
的目的。
查看此线程中提供的出色答案:What does if __name__ == "__main__": do?
让我们简化一下...
您有一个名为...的文件...假设... libmain.py
(一个非常不幸的名称,但是... meh)您想用作库(可以在某处导入的模块)并用作应用程序的主要入口点。
让我们使其变得非常琐碎:让libmain.py
文件仅打印__name__
:
libmain.py:
print "Current __name__: %s" % __name__
现在,创建另一个仅导入
foo.py
的文件(例如,libmain
):foo.py
import libmain
如果直接执行
python ./libmain.py
,将得到以下输出:Current __name__: __main__
而如果执行导入libmain(
python ./foo.py
)的文件,则会得到:Current __name__: libmain
因此,为避免在导入
libmain.py
时执行代码,请将其放在if __name__ == "__main__"
下(因为如上例所示,当导入libmain
时,__name__
将为libmain
)在您的特定情况下,并且不了解详细情况,我想说您是在某处导入
welcome
(或zxc
?),这就是导致代码被执行的原因。关于python - Python在导入时执行功能(显然),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23064838/