Python Canvas 和 Grid Tkinter

标签 python

我想在网格中有一个 Canvas ,但我想将输入和标签与 Canvas 分开,怎么办?我可以在不干扰输入和标签的情况下放置 Canvas ,所以它看起来很“可爱”。现在,如果我将 Canvas 放在第 0,3 行,那么就会有一个巨大的空间,如果周围有另一个小部件,则会留下很大的空白或使小部件变长。 我想将 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.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()

最佳答案

您可以创建一个 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

关于Python Canvas 和 Grid Tkinter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149483/

相关文章:

python - 将模型父类(super class)转换为子类的 Django 工作流

python - 有没有办法使用加载的服务帐户来访问 Cloud Run 中的 Google 表格?

python - 合并列表列表,使唯一值覆盖非唯一值?

python基础课问题,我哪里错了

c# - Python hmac 和 C# hmac

python - 为什么我的 Python 代码不接受 %z 作为 DateTime 指令?

python - 使用 SQLAlchemy 查询过滤 `None` 字段对象

python - NLTK:为一个词查找大小为 2k 的上下文

python - 代码来临 2019 年第 1 天 : What's wrong with my math/logic?

python - 处理表格的图像以从中获取数据