2017-04-04 79 views
3

这是我第一篇文章!如何分割多个文件中的Python Tkinter代码

首先这里是我的project的github链接(我也是github上的noob)。

编辑:

因此,这里是什么,我希望做一个例子,我有一个框架,标签,菜单,在它的按钮,所有和一些功能也一个大的Tkinter类。

我想让我的MakeUI()中的UI描述和我的funcs移动到另一个文件,但我仍然需要访问小部件。

< Main.py>

# -*- coding: utf-8 -*- 

from tkinter import * 
from Interface import * 


Fenetre = Tk() 
UI = MakeUI(Fenetre) 

UI.mainloop() 

UI.destroy() 

< Interface.py>

# -*- coding: utf-8 -*- 

from tkinter import * 
from tkinter.filedialog import * 


class MakeUI(Frame): 

    def __init__(self, Fenetre, **kwargs): 

     # Héritage 
     Frame.__init__(self, Fenetre, width=1500, height=700, **kwargs) 

     self.pack(fill=BOTH) 

     self.FrameInfos = LabelFrame(self, text="Choix des paramètres", padx=2, pady=2) 
     self.FrameInfos.pack(fill="both", expand="yes", padx=5, pady=5) 

     self.MsgInfosCarte = Label(self.FrameInfos, text="Example", width=45) 
     self.MsgInfosCarte.pack(padx=2, pady=2) 

    def AfficherCarte(self): 
     self.MsgInfosCarte["text"] = "OK" 

而现在在这个例子中,我需要将AfficherCarte功能移动到像MapFuncs.py或者其他文件。 我希望MakeUI能够调用其他文件funcs和其他文件funcs来修改界面。

我无法正确地做到这一点。

感谢您的帮助。

+0

您是否要求提供关于如何拆分大'MakeUI'类的建议? – Petar

+0

是的! 就像用最后一个AfficherCarte创建一个MapFuncs.py一样。 – Banadora

+0

请修改您的帖子,以便确实存在问题。你会希望将你所问的特定代码放入问题中,而不是只链接到一个存储库。具体说明你想要的帮助。 – tkerwin

回答

0

为了移动的函数修改在一个单独的文件的GUI的窗口小部件,可以简单地传递插件实例(或在此实例中被存储的对象)作为函数的输入参数

< MapFuncs.py>

def AfficherCarte(UI): 
    UI.MsgInfosCarte["text"] = "OK" 

< Interface.py>

import tkinter as tk 
from MapFuncs import AfficherCarte 

class MakeUI(tk.Frame): 

    def __init__(self, Fenetre, **kwargs): 

     # Héritage 
     tk.Frame.__init__(self, Fenetre, width=1500, height=700, **kwargs) 
     self.pack() 

     self.FrameInfos = tk.LabelFrame(self, text="Choix des paramètres", padx=2, pady=2) 
     self.FrameInfos.pack(fill="both", expand="yes", padx=5, pady=5) 

     self.MsgInfosCarte = tk.Label(self.FrameInfos, text="Example", width=45) 
     self.MsgInfosCarte.pack(padx=2, pady=2) 

     # Call function from external file to modify the GUI 
     AfficherCarte(self) 

如果你这样做是因为你的代码变得太大了,另一种方法是将你的GUI划分为接口的每个主要部分的单独的类(参见https://stackoverflow.com/a/17470842/4084269)。