拆分TKInter函数

时间:2014-04-26 12:26:05

标签: python tkinter

我是所有语言编程的新手,并且在某些python上遇到了麻烦。到目前为止,我已经编写了一系列我已经编写过的函数,所以当我遇到问题时,我可以参考它们。为了收集它们,我使用tkinter为我做了'AddToCollection.py'。当我运行我创建的.py文件时,我可以使它工作,但是我想将它导入我想要的任何函数。每当我使用AddToCollection导入代码时,它立即运行。我试图将其拆分为函数,以便新窗口仅在我调用函数时打开,但是它无法访问条目以获取文件名。帮助将不胜感激。 TL; DR如何在导入时阻止此代码运行?

from tkinter import * 
from tkinter import messagebox as box

#pops up a box to confirm you want to save it   
def SaveConf():
    var = box.askokcancel('Save', 'Are you sure you want to save?')    
    if var == 1:
        Save(FileName.get())     



#Does the actual saving
def Save(Oldfile):
    file = open(Oldfile+".py", 'r')
    ToAdd = '\n#- '+ Oldfile +' -------------\n' + file.read() + '\n#-----------'
    file.close()
    newfile = open("/New.py", 'a+')
    newfile.write(ToAdd)
    newfile.close()
    newwind.destroy()


#setting up items in window

#Initialising window
newwind = Tk()
newwind.title('Save a file')

#to enter filename
Frame3 = Frame()
Frame3.pack(padx=5, pady=5)
FileName = Entry(Frame3)
FileName.pack(side = LEFT)

#click button
SaveBtn2 = Button(Frame3, text = 'Save to Testicles.py', command = SaveConf)
SaveBtn2.pack(side=RIGHT,padx=2)

2 个答案:

答案 0 :(得分:1)

如果我正确理解这一点,您只想导入并使用您编写的功能?我认为你所缺少的部分是:

if __name__ == "__main__":
    #setting up items in window

    #Initialising window
    newwind = Tk()
    newwind.title('Save a file')

    #to enter filename
    Frame3 = Frame()
    Frame3.pack(padx=5, pady=5)
    FileName = Entry(Frame3)
    FileName.pack(side = LEFT)

当文件作为模块导入时,这将阻止此代码运行。

答案 1 :(得分:1)

构造tkinter应用程序的常用方法是将Tk子类化并在构造函数中创建窗口小部件。以下是如何为代码构建体系结构的示例。它将您的应用程序打包在一个类(Tk的子类)中,并提供一个辅助函数launch_app来初始化您的类并在其上运行mainloop。

__name__ == "__main__"的要点是从导入模块时执行的代码中隔离脚本运行时执行的代码#> python foo.py。如果要在用作脚本时提供默认行为,以及从另一个模块使用该功能的能力,请将其放在函数中并从if __name__ == "__main__"块调用此函数。

我也冒昧地将你的代码转换为python编码标准(在PEP 8中描述)

import tkinter as tk
from tkinter import messagebox as box

#Does the actual saving
def save(oldfile):
    file_ = open(oldfile+".py", 'r')
    #[...]
    newfile.close()
    #do not destroy window here

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.title('Save a file')

        frame3 = tk.Frame()
        frame3.pack(padx=5, pady=5)
        self.filename = tk.Entry(frame3)
        self.filename.pack(side=tk.LEFT)

        #click button
        save_btn2 = tk.Button(frame3, text='Save to Testicles.py', command=self.save_conf)
        save_btn2.pack(side=tk.RIGHT, padx=2)

    def save_conf(self):
        var = box.askokcancel('Save', 'Are you sure you want to save?')
        if var == 1:
            save(self.FileName.get())
            self.destroy()  #<-- here come the destroy

def launch_app():
    app = App()
    app.mainloop()

if __name__ == "__main__":
    launch_app()