2013-11-22 142 views
1

我想在網格中有一個畫布但是我想要將輸入和標籤從畫布中分離出來,怎麼樣?我可以放置畫布而不會干擾輸入和標籤,因此它看起來很「可愛」。現在,如果我將畫布放在可以說第0,3行的位置,那麼將會有一個巨大的空間,並且如果周圍有另一個小部件,它將留下一個大的空白區域或使該部件變長。 我想放置在右側的畫布,在左側的其他部件沒有留下一個大空間的任何地方
任何幫助,將不勝感激Python畫布和網格Tkinter

import tkinter as tk 
    from tkinter import * 
    class Gui(): 
     def __init__(self, root): 
      self.root=root 
      self.entry = tk.Entry(root) 
      stvar=tk.StringVar() 
      stvar.set("one") 
      self.option=tk.OptionMenu(root, stvar, "one", "two", "three") 

      self.canvas=tk.Canvas(root, width=300, height=200, background='white') 
      self.canvas.grid(row=0,column=2) 
      label1=Label(self.root, text="Figure").grid(row=0,column=0, sticky="nw") 
      label2=Label(self.root, text="X").grid(row=1,column=0, sticky="w") 
      label3=Label(self.root, text="Y").grid(row=2,column=0, sticky="w") 
      self.option.grid(row=0,column=1,sticky="nwe") 
      entry = Entry(self.root).grid(row = 1,column = 1,sticky = E+ W) 
      entry1 = Entry(self.root).grid(row = 2,column = 1, sticky = E) 
      Button1=Button(self.root,text="Draw").grid(row = 3,column = 1, sticky = "we") 
      figure1=self.canvas.create_rectangle(80, 80, 120, 120, fill="blue") 

      #Grid.columnconfigure(self.root,1,weight=1, size=200) 
    if __name__== '__main__': 
     root=tk.Tk() 
     gui=Gui(root) 
     root.mainloop() 

回答

3

您可以創建一個Frame,並把所有的非-canvas小部件。它們在框架網格中的位置將忽略框架外部的窗口部件的位置。

import tkinter as tk 
from tkinter import * 
class Gui(): 
    def __init__(self, root): 
     self.root=root 
     self.entry = tk.Entry(root) 
     stvar=tk.StringVar() 
     stvar.set("one") 

     self.canvas=tk.Canvas(root, width=300, height=200, background='white') 
     self.canvas.grid(row=0,column=1) 

     frame = Frame(self.root) 
     frame.grid(row=0,column=0, sticky="n") 

     self.option=tk.OptionMenu(frame, stvar, "one", "two", "three") 
     label1=Label(frame, text="Figure").grid(row=0,column=0, sticky="nw") 
     label2=Label(frame, text="X").grid(row=1,column=0, sticky="w") 
     label3=Label(frame, text="Y").grid(row=2,column=0, sticky="w") 
     self.option.grid(row=0,column=1,sticky="nwe") 
     entry = Entry(frame).grid(row = 1,column = 1,sticky = E+ W) 
     entry1 = Entry(frame).grid(row = 2,column = 1, sticky = E) 
     Button1=Button(frame,text="Draw").grid(row = 3,column = 1, sticky = "we") 
     figure1=self.canvas.create_rectangle(80, 80, 120, 120, fill="blue") 

     #Grid.columnconfigure(self.root,1,weight=1, size=200) 
if __name__== '__main__': 
    root=tk.Tk() 
    gui=Gui(root) 
    root.mainloop() 

結果:

enter image description here