我是所有语言编程的新手,并且在某些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)
答案 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()