2013-11-22 165 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