我try 通过.grid()方法放置小部件,当我将RadioButton放置在不同的行上时-我看到不同行上的填充,也是它们之间的填充.

This is what I talking about (I point paddings that I noticed): enter image description here

下面是我的代码:

import tkinter as tk
from string import hexdigits
from tkinter import ttk
from random import choices

color_hex = '#C91212'

class MainWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Main window')
        self.tool = tk.IntVar(value=0)
        self.topmenu = TopMenu(self)
        self.topmenu.pack()

class TopMenu(tk.Frame):
    def __init__(self, master: MainWindow):
        tk.Frame.__init__(self, master)
        self.root = master
        ttk.Label(self, text="Hex color:").grid(row=0, column=0)

        self.symbol_entry_text = tk.StringVar(value=color_hex)
        self.symbol_entry = ttk.Entry(self, textvariable=self.symbol_entry_text)
        self.symbol_entry.grid(row=0, column=1)

        ttk.Button(self, text='Random').grid(column=3, row=0)
        ttk.Button(self, text='Load').grid(column=4, row=0)
        ttk.Button(self, text='Save').grid(column=5, row=0)

        self.c = tk.Canvas(self, width=21, height=21, highlightthickness=0, bg=color_hex)
        self.c.grid(column=2, row=0)
        
        ttk.Radiobutton(self, text='Pencil', value=0, variable=self.root.tool).grid(row=1, column=0)
        ttk.Radiobutton(self, text='Floodfill', value=1, variable=self.root.tool).grid(row=1, column=1)
        ttk.Radiobutton(self, text='Eyedropper', value=2, variable=self.root.tool).grid(row=1, column=2)

if __name__ == "__main__":
    app = MainWindow()
    app.mainloop()

推荐答案

您的代码没有问题,这里的问题是 colored颜色 CanvasEyedropper单选框在同一列(column=2),这意味着这两个元素的列宽是相同的.

现在有一些方法可以让你随心所欲地打开windows

对于这种类型的设计

enter image description here

您可以将单选按钮的跨度从Eyedropper改为2,这意味着单选按钮现在将分成两列.

ttk.Radiobutton(self, text='Eyedropper', value=2, variable=self.root.tool).grid(row=1, column=2, columnspan=2)

完整代码

import tkinter as tk
from string import hexdigits
from tkinter import ttk
from random import choices

color_hex = '#C91212'

class MainWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Main window')
        self.tool = tk.IntVar(value=0)
        self.topmenu = TopMenu(self)
        self.topmenu.pack()

class TopMenu(tk.Frame):
    def __init__(self, master: MainWindow):
        tk.Frame.__init__(self, master)
        self.root = master
        ttk.Label(self, text="Hex color:").grid(row=0, column=0, padx=10)

        self.symbol_entry_text = tk.StringVar(value=color_hex)
        self.symbol_entry = ttk.Entry(self, textvariable=self.symbol_entry_text)
        self.symbol_entry.grid(row=0, column=1)

        ttk.Button(self, text='Random').grid(column=3, row=0, padx=10)
        ttk.Button(self, text='Load').grid(column=4, row=0)
        ttk.Button(self, text='Save').grid(column=5, row=0, padx=10)

        self.c = tk.Canvas(self, width=21, height=21, highlightthickness=0, bg=color_hex)
        self.c.grid(column=2, row=0)
        
        ttk.Radiobutton(self, text='Pencil', value=0, variable=self.root.tool).grid(row=1, column=0)
        ttk.Radiobutton(self, text='Floodfill', value=1, variable=self.root.tool).grid(row=1, column=1)
        ttk.Radiobutton(self, text='Eyedropper', value=2, variable=self.root.tool).grid(row=1, column=2, columnspan=2) # see here

if __name__ == "__main__":
    app = MainWindow()
    app.mainloop()

Or for this enter image description here

您可以在画布网格中添加sticky="w"(w表示西方

self.c.grid(column=2, row=0, sticky="w")

完整代码

import tkinter as tk
from string import hexdigits
from tkinter import ttk
from random import choices

color_hex = '#C91212'

class MainWindow(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Main window')
        self.tool = tk.IntVar(value=0)
        self.topmenu = TopMenu(self)
        self.topmenu.pack()

class TopMenu(tk.Frame):
    def __init__(self, master: MainWindow):
        tk.Frame.__init__(self, master)
        self.root = master
        ttk.Label(self, text="Hex color:").grid(row=0, column=0, padx=10)

        self.symbol_entry_text = tk.StringVar(value=color_hex)
        self.symbol_entry = ttk.Entry(self, textvariable=self.symbol_entry_text)
        self.symbol_entry.grid(row=0, column=1)

        ttk.Button(self, text='Random').grid(column=3, row=0, padx=10)
        ttk.Button(self, text='Load').grid(column=4, row=0)
        ttk.Button(self, text='Save').grid(column=5, row=0, padx=10)

        self.c = tk.Canvas(self, width=21, height=21, highlightthickness=0, bg=color_hex)
        self.c.grid(column=2, row=0, sticky="w")
        
        ttk.Radiobutton(self, text='Pencil', value=0, variable=self.root.tool).grid(row=1, column=0)
        ttk.Radiobutton(self, text='Floodfill', value=1, variable=self.root.tool).grid(row=1, column=1)
        ttk.Radiobutton(self, text='Eyedropper', value=2, variable=self.root.tool).grid(row=1, column=2)

if __name__ == "__main__":
    app = MainWindow()
    app.mainloop()

Python相关问答推荐

提取两行之间的标题的常规表达

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

rame中不兼容的d类型

Python 约束无法解决n皇后之谜

标题:如何在Python中使用嵌套饼图可视化分层数据?

使用索引列表列表对列进行切片并获取行方向的向量长度

查找两极rame中组之间的所有差异

从numpy数组和参数创建收件箱

将图像拖到另一个图像

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

加速Python循环

根据列值添加时区

在Django admin中自动完成相关字段筛选

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

搜索按钮不工作,Python tkinter

从源代码显示不同的输出(机器学习)(Python)

在电影中向西北方向对齐""

如何训练每一个pandaprame行的线性回归并生成斜率

在第一次调用时使用不同行为的re. sub的最佳方式

当我定义一个继承的类时,我可以避免使用`metaclass=`吗?