我将继续使用该加密程序,现在正在为其开发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/

10-09 08:00