问题描述
我是tkinter的初学者,一直在玩我到目前为止所学的知识。以下是我发现的仅与回答我的问题有关的代码,下面附有我到目前为止所获得的gui图片。
# Frame for the time spinners
timeFrame = tkinter.LabelFrame(mainWindow,text="Time")
timeFrame.grid(row=3,column=0,sticky="new")
# Time spinners
hourSpinner = tkinter.SpinBox(timeFrame,width=2,values=tuple(range(0,24)))
minuteSpinner = tkinter.SpinBox(timeFrame,from_=0,to=59)
secondSpinner = tkinter.SpinBox(timeFrame,to=59)
hourSpinner.grid(row=0,column=0)
tkinter.Label(timeFrame,text=":").grid(row=0,column=1)
minuteSpinner.grid(row=0,column=2)
tkinter.Label(timeFrame,column=3)
secondSpinner.grid(row=0,column=4)
timeFrame.config(padx=36)
canvas = tkinter.Canvas(mainWindow,width=50,height=50,bg="red")
canvas.grid(row=4,column=0)
在这里,我似乎无法理解包含时间成分的标签框和红色画布之间的填充来自何处。 (我已使用截图工具以黄色突出显示了我所指的填充。)
我觉得标签框和红色画布之间应该没有填充物,并且画布应该从标签框末端周围的某个地方开始。
如果有人能指出我该填充物的来源以及如何使画布从标签框架的末端开始,我将不胜感激 >
但是,如果阅读此问题的任何人发现他/她需要查看完整的代码才能回答,那么我将在下面附加我键入的完整代码,
try:
import tkinter
except ImportError: # Python2
import Tkinter as tkinter
import os
mainWindow = tkinter.Tk()
mainWindow.title("Grid Demo")
mainWindow.geometry("640x480+320+125")
label = tkinter.Label(mainWindow,text="Tkinter Grid Demo")
label.grid(row=0,columnspan=3)
mainWindow.columnconfigure(0,weight=1)
mainWindow.columnconfigure(1,weight=1)
mainWindow.columnconfigure(2,weight=3)
mainWindow.columnconfigure(3,weight=3)
mainWindow.columnconfigure(4,weight=3)
mainWindow.rowconfigure(0,weight=1)
mainWindow.rowconfigure(1,weight=10)
mainWindow.rowconfigure(2,weight=1)
mainWindow.rowconfigure(3,weight=3)
mainWindow.rowconfigure(4,weight=3)
fileList = tkinter.ListBox(mainWindow)
fileList.grid(row=1,rowspan=2,sticky="nsew")
fileList.config(relief="sunken",borderwidth=2)
for zone in os.listdir(r"C:\Windows\System32"):
fileList.insert(tkinter.END,zone)
listScroll = tkinter.Scrollbar(mainWindow,orient="vertical",command=fileList.yview)
fileList.config(yscrollcommand=listScroll.set)
listScroll.grid(row=1,column=1,sticky="nsw")
# Frame for the radio buttons
optionFrame = tkinter.LabelFrame(mainWindow,text="File Details")
optionFrame.grid(row=1,column=2,sticky="ne")
rbValue = tkinter.Intvar()
rbValue.set(3)
# Radio Buttons
radio1 = tkinter.Radiobutton(optionFrame,text="Filename",value=1,variable=rbValue)
radio2 = tkinter.Radiobutton(optionFrame,text="Path",value=2,variable=rbValue)
radio3 = tkinter.Radiobutton(optionFrame,text="Timestamp",value=3,variable=rbValue)
radio1.grid(row=0,sticky="w")
radio2.grid(row=1,sticky="w")
radio3.grid(row=2,sticky="w")
# Widget to display the result
resultLabel = tkinter.Label(mainWindow,text="Result")
resultLabel.grid(row=2,sticky="nw")
result = tkinter.Entry(mainWindow)
result.grid(row=2,sticky="sw")
# Frame for the time spinners
timeFrame = tkinter.LabelFrame(mainWindow,column=0)
mainWindow.mainloop()
解决方法
原因是您配置的行的权重。如果删除这些行:
mainWindow.rowconfigure(3,weight=3)
mainWindow.rowconfigure(4,weight=3)
布局看起来像您想要的。有关更多信息,请检查以下答案:https://stackoverflow.com/a/45850468