Tkinter应用最后一列后出现额外空白的问题求助
Tkinter应用最后一列后出现额外空白的问题求助
大家好,我正在用Tkinter和CustomTkinter开发一个应用,遇到了一个布局上的小问题,想请教下各位。
需求是这样的:用户点击按钮后,每次会生成3个组件(两个文本框+一个复选框),按行排列,每行最多放5组,满了就自动换行。我已经算出了组件该放的位置,但奇怪的是,界面最后一列后面会多出一块空白,可第一列前面却没有这个问题,我实在搞不懂原因在哪。
先贴我的代码:
import tkinter as tk import customtkinter from tkinter import messagebox root = tk.Tk() root.minsize(1100, 650) root.iconbitmap('textures/logo.ico') root.title('Diceware') global number_of_dicerolls number_of_dicerolls = 0 # 给行0到15设置权重 i = 0 while i <= 15: root.grid_rowconfigure(i, weight=1, uniform='row') i += 1 # 给列0到9设置权重 i = 0 while i <= 9: root.grid_columnconfigure(i, weight=1, uniform='column') i += 1 def display_words(): """ 用户点击"roll dice"按钮时调用,显示骰子结果和对应单词 """ global number_of_dicerolls if number_of_dicerolls < 35: column_to_be_placed_in = (number_of_dicerolls % 5) * 2 number_of_dicerolls += 1 diceroll_widget = customtkinter.CTkTextbox(root, height=1) diceroll_widget.insert('1.0', 'Hello, world!') diceroll_widget.grid(row=2 + 2 * ((number_of_dicerolls - 1) // 5), column=column_to_be_placed_in, pady=(5, 0), padx=10) word_widget = customtkinter.CTkTextbox(root, height=1) word_widget.insert('1.0', 'Goodbye, world!') word_widget.grid(row=3 + 2 * ((number_of_dicerolls - 1) // 5), column=column_to_be_placed_in, sticky='n', pady=(0, 5), padx=10) test_var = tk.IntVar() checkbox = customtkinter.CTkCheckBox(master=root, variable=test_var, text='', checkbox_width=20, checkbox_height=20, fg_color='gray', hover_color='white') checkbox.grid(row=3 + 2 * ((number_of_dicerolls - 1) // 5), column=column_to_be_placed_in + 1, sticky='w') else: answer = tk.messagebox.askquestion('Dice roll limit reached', 'You have reached the maximum limit of 35 dice rolls. Do you want ' 'to clear the screen?', parent=root) if answer == 'yes': clear_window() roll_dice_button = customtkinter.CTkButton(root, border_width=2, border_color='black', text='ROLL DICE', fg_color='blue', hover_color='gray', command=display_words) roll_dice_button.grid(row=0, column=0, columnspan=10, pady=0, sticky='n') root.mainloop()
我已经尝试过这些方法,但都没解决:
- 给组件添加不同的
sticky属性 - 调整行列的
weight值 - 去掉行列的
uniform属性 - 把
padx、pady、ipadx、ipady都设为0
调整这些参数时,组件的位置确实会变化(比如去掉复选框的sticky='w'后,它就不会靠左了),但最后一列后面的空白始终存在,有没有大佬能帮我分析下原因?
备注:内容来源于stack exchange,提问作者IceTheDev2
相关产品推荐
相关产品推荐

