2014-06-29 2 views
0

J'utilise Tkinter pour créer un MenuBar avec certaines fonctions, et je voudrais les afficher dans la même fenêtre sous la barre de menus. Les codes ci-dessous sont en mesure de le faire. Mais le problème est lorsque je change de fonction, il se chevauche sur l'affichage de la fonction précédente, que vous pouvez toujours voir l'étiquette (ou Entrée), et être en mesure de taper sur l'entrée de la fonction précédente.Éviter le chevauchement d'écran dans Tkinter

Y a-t-il un moyen d'actualiser l'affichage chaque fois avant d'exécuter une fonction? Quelque chose comme cls.

import Tkinter 
from Tkinter import Tk, Frame, Menu 
from Tkinter import IntVar, BOTH 
class App(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent)    
     self.parent = parent   
     self.initUI() 

    def initUI(self):  
     self.parent.title("Test")   
     menubar = Menu(self.parent) 
     self.parent.config(menu=menubar)   
     fileMenu = Menu(menubar)  
     menubar.add_cascade(label="Discrepancy", menu=fileMenu) 
     fileMenu.add_command(label="View current case", command=self.view) 
     fileMenu.add_command(label="OK Process", command=self.OK)   

    def view(self): 
     self.pack(fill=BOTH, expand=1) 
     self.var = IntVar() 
     Tkinter.Label(self,text="RMA", relief=Tkinter.RIDGE).grid(row=0, column=0, sticky=Tkinter.W) 
     Tkinter.Label(self, text="SN", relief=Tkinter.RIDGE).grid(row=0, column=1, sticky=Tkinter.W) 

    def OK(self): 
     self.pack(fill=BOTH, expand=1) 
     self.var = IntVar() 

     Tkinter.Label(self,text="RMA").grid(row=0) 
     Tkinter.Label(self, text="SN").grid(row=1) 
     Tkinter.Entry(self, width=50).grid(row=0, column=1,pady=4) 
     Tkinter.Entry(self, width=50).grid(row=1, column=1,pady=4) 

def main(): 

    root = Tk() 
    root.geometry("1280x720") 
    app = App(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

Répondre

1

Utilisez grid_forget() pour masquer des éléments.

Vous pouvez ajouter des éléments dans le nouveau Frame et vous devrez alors utiliser grid_forget() uniquement pour ce cadre.

Vous pouvez même créer tous les widgets au début, puis utiliser grid_forget() pour masquer et grid(...) pour afficher à nouveau.


EDIT:

import Tkinter 
from Tkinter import Tk, Frame, Menu 
from Tkinter import IntVar, BOTH 
class App(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent)    
     self.parent = parent   
     self.initUI() 

    def initUI(self):  
     self.parent.title("Test")   
     menubar = Menu(self.parent) 
     self.parent.config(menu=menubar)   
     fileMenu = Menu(menubar)  
     menubar.add_cascade(label="Discrepancy", menu=fileMenu) 
     fileMenu.add_command(label="View current case", command=self.view) 
     fileMenu.add_command(label="OK Process", command=self.OK) 

     self.var = IntVar() 

     self.view_label1 = Tkinter.Label(self, text="RMA", relief=Tkinter.RIDGE) 
     self.view_label2 = Tkinter.Label(self, text="SN", relief=Tkinter.RIDGE) 

     self.ok_label1 = Tkinter.Label(self,text="RMA") 
     self.ok_label2 = Tkinter.Label(self, text="SN") 

     self.ok_entry1 = Tkinter.Entry(self, width=50) 
     self.ok_entry2 = Tkinter.Entry(self, width=50) 

     self.pack(fill=BOTH, expand=1) 

    def view(self): 
     self.ok_label1.grid_forget() 
     self.ok_label2.grid_forget() 
     self.ok_entry1.grid_forget() 
     self.ok_entry2.grid_forget() 

     self.view_label1.grid(row=0, column=0, sticky=Tkinter.W) 
     self.view_label2.grid(row=0, column=1, sticky=Tkinter.W) 

    def OK(self): 
     self.view_label1.grid_forget() 
     self.view_label2.grid_forget() 

     self.ok_label1.grid(row=0) 
     self.ok_label2.grid(row=1) 
     self.ok_entry1.grid(row=0, column=1, pady=4) 
     self.ok_entry2.grid(row=1, column=1, pady=4) 

def main(): 

    root = Tk() 
    root.geometry("1280x720") 
    app = App(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

EDIT: avec Frame

import Tkinter 
from Tkinter import Tk, Frame, Menu 
from Tkinter import IntVar, BOTH 
class App(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent)    
     self.parent = parent   
     self.initUI() 

    def initUI(self):  
     self.parent.title("Test")   
     menubar = Menu(self.parent) 
     self.parent.config(menu=menubar)   
     fileMenu = Menu(menubar)  
     menubar.add_cascade(label="Discrepancy", menu=fileMenu) 
     fileMenu.add_command(label="View current case", command=self.view) 
     fileMenu.add_command(label="OK Process", command=self.OK) 

     self.var = IntVar() 

     self.frame_view = Frame(self) 
     self.view_label1 = Tkinter.Label(self.frame_view, text="RMA", relief=Tkinter.RIDGE) 
     self.view_label2 = Tkinter.Label(self.frame_view, text="SN", relief=Tkinter.RIDGE) 
     self.view_label1.grid(row=0, column=0, sticky=Tkinter.W) 
     self.view_label2.grid(row=0, column=1, sticky=Tkinter.W) 
     #self.frame_view.pack(fill=BOTH, expand=1) 

     self.frame_ok = Frame(self) 
     self.ok_label1 = Tkinter.Label(self.frame_ok, text="RMA") 
     self.ok_label2 = Tkinter.Label(self.frame_ok, text="SN") 
     self.ok_entry1 = Tkinter.Entry(self.frame_ok, width=50) 
     self.ok_entry2 = Tkinter.Entry(self.frame_ok, width=50) 
     self.ok_label1.grid(row=0) 
     self.ok_label2.grid(row=1) 
     self.ok_entry1.grid(row=0, column=1, pady=4) 
     self.ok_entry2.grid(row=1, column=1, pady=4) 
     #self.frame_ok.pack(fill=BOTH, expand=1) 

     self.pack(fill=BOTH, expand=1) 

    def view(self): 
     self.frame_ok.grid_forget() 

     self.frame_view.grid() 

    def OK(self): 
     self.frame_view.grid_forget() 

     self.frame_ok.grid() 


def main(): 

    root = Tk() 
    root.geometry("1280x720") 
    app = App(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

THz impressionnant, cela fonctionne. J'ai lu beaucoup de tutoriels Tkinter mais je n'ai pas trouvé cette fonction. Ce serait bien s'il y a une page de document pour inclure toutes sortes de fonctions. – user3787620

+0

Ma source de connaissance: http://effbot.org/tkinterbook/ – furas

Questions connexes