Python在导入时执行函数(显然)

2024-04-18 04:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在继续那个加密程序,现在我正在为它开发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”


Tags: textfromimportselfnumberdefguicolumn
2条回答

导入模块时,该模块中的所有代码都将执行。通常,“executed”表示模块中的所有函数和变量都已定义。但是,如果在模块中包含可执行代码,它将执行。你知道吗

就你而言,zxc.py公司底部有创建一些窗口的代码。因为你没有通过说“不要在导入时运行这个”来保护代码,所以它在导入时运行。你知道吗

为了防止代码运行,通常将其隐藏在if语句后面,如下所示:

if __name__ == "__main__":
    <your code here>

执行导入时,__name__永远不会设置为文字字符串"__main__"。它只在您尝试直接执行脚本时设置。你知道吗

这就是if __name__ == "__main__"的目的。你知道吗

看看这个帖子提供的答案:What does if __name__ == "__main__": do?

让我们简化一下。。。你知道吗

你有一个叫做。。。比如说。。。libmain.py(一个很不幸的名字,但是。。。meh)作为库(可以导入到某处的模块)和应用程序主入口点。你知道吗

让我们把它变得非常简单:让libmain.py文件只打印__name__

libmain.py文件:

print "Current __name__: %s" % __name__

现在,创建另一个只导入libmain的文件(foo.py):

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?)在某个地方,这就是导致代码被执行的原因。你知道吗

相关问题 更多 >