2015-09-18 4 views
1

Я пытаюсь создать меню для моего проекта term, и у меня возникает проблема.TKinter python GUI issue

Я хочу левую панель для своих элементов управления, а справа там будет напыление, но когда я запустил код, в левой верхней области создается незанятое пространство из-за t1.pack() и c1.pack ()

Пожалуйста, помогите мне, как я могу получить две прозрачные панели.

Сообщите мне, если вы не получили эту проблему.

Заранее спасибо :)

__author__ = 'sagar' 
try: 
    import tkinter as tk # for python 3 
except: 
    #import Tkinter as tk # for python 2 
    from Tkinter import * 
    import ttk as ttk 
    import ctypes 
    import tkMessageBox 

user32 = ctypes.windll.user32 
WIDTH,HEIGHT = user32.GetSystemMetrics(0),user32.GetSystemMetrics(1) 
WIDTH -= 50 
HEIGHT -= 75 

class Application: #pygubu.TkApplication 
    def __init__(self,root): 
     self.root = root 

     self.fr_main = Frame(self.root,background="grey",highlightcolor="red") 
     self.fr_main.grid(row=0,column=0,ipadx=(5*WIDTH)/100,ipady=HEIGHT) 
     # self.fr_main.pack() 

     self.btn_Simulator = Button(self.fr_main,text="Simulator") 
     self.btn_Simulator.grid(row=0,column=0,pady=10) 
     # self.btn_Simulator.pack() 

     self.btn_Analysis = Button(self.fr_main,text="Analysis") 
     self.btn_Analysis.grid(row=0,column=1,pady=10) 
     # self.btn_Analysis.pack() 


     self.fr_second = Frame(self.root,background="black",highlightcolor="red") 
     self.fr_second.grid(row=0,column=1,ipadx=(40*WIDTH)/100,ipady=HEIGHT) 
     self.nb_main = ttk.Notebook(self.fr_second) 
     self.nb_main.pack(expand=1,fill=BOTH) 


     f1 = Frame(self.nb_main) 
     f2 = Frame(self.nb_main) 

     self.nb_main.add(f2,text="Canvas") 
     self.nb_main.add(f1,text="Calculation") 

     t1 = Text(f1) 
     c1 = Canvas(f2) 
     c1.configure(background="black") 
     t1.pack(expand=1,fill=BOTH) 
     c1.pack(expand=1,fill=BOTH) 


    def __controlState__(self,control,state): 
     control.configure(state =state) 

    def showName(self,Enableframe,DisableFrame): 

     for child in Enableframe.winfo_children(): 
      Enableframe.config(relief = RAISED) 
      self.__controlState__(child,"active") 

     for child in DisableFrame.winfo_children(): 
      self.__controlState__(child,"disable") 


if __name__ == '__main__': 
    root = Tk() 
    app = Application(root) 
    root.title("Network Simulator") 


    root.geometry('%dx%d+%d+%d' % (WIDTH,HEIGHT,0,0)) 
    root.mainloop() 

ответ

1

Пожалуйста, помогите мне, как я могу получить две четкие панели.

Абсолютный самый простой способ, чтобы получить два кадра бок о бок, которые занимают всю высоту окна является использование pack с соответствующими опциями:

self.fr_main.pack(side="left", fill="both", expand=True) 
self.fr_second.pack(side="left", fill="both", expand=True) 

Ключ в том, что первый должен быть слева или справа, заполняя направление «y». После этого вторая может быть на любой стороне, если она заполняется в обоих направлениях.

Если вы хотите использовать grid, не забудьте включить опцию sticky так, чтобы кадры заполняют пространство, данное им:

self.fr_main.grid(row=0, column=0, sticky="nsew") 
self.fr_second.grid(row=0, column=0, sticky="nsew") 

С grid, вы также хотите, чтобы вес колонны так что сетка знает, как выделить дополнительное пространство

self.root.grid_rowconfigure(0, weight=1) 
self.root.grid_columnconfigure(0, weight=1) 
self.root.grid_columnconfigure(1, weight=1) 
+0

Спасибо, это сработало для меня :) –