2017-04-04 35 views
3

これは私の最初の投稿です!Python Tkinterコードを複数のファイルに分割する方法

最初はここに私のprojectのgithubのリンク(私もgithubのnoobです)です。編集

をだからここは私が何をしたいの例ですが、私はあまりにもそれにフレーム、ラベル、メニュー、ボタン、およびすべての大きなTkinterのクラスといくつかの機能を持っています。

私のMakeUI()にUIの説明を入れて、別のファイルに移動したいのですが、私はまだウィジェットにアクセスする必要があります。

< 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" 

そして今、この例では、私は他のMapFuncs.pyなど別のファイルにAfficherCarte機能を移動する必要があります。 そして、私は、MakeUIが他のファイルfuncsと他のファイルfuncsを呼び出してインタフェースを変更できるようにしたいと思います。

私はそれを正しく行うことができません。

ありがとうございました。

+0

大きな 'MakeUI'クラスを分割する方法について助言を求めていますか? – Petar

+0

まあまあ! 最後の1つの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参照)。

関連する問題