【问题标题】:The height and width can't be adjusted when I change the size更改尺寸时无法调整高度和宽度
【发布时间】:2020-07-31 11:58:43
【问题描述】:
from tkinter import *


win = Tk()
win.title('McDonald ordering system')
win.geometry('600x300')


lbtitle = Label(win,text='Welcome to McDonald',bg='yellow')
lbtitle.grid(row=0,column=1,columnspan=3)

f1 = Frame(win,bd=2,width=200,height=250,relief=GROOVE)
f1.grid(row=1,column=0,rowspan=3)

f2 = Frame(win,bd=2,width=200,height=250,relief=GROOVE)
f2.grid(row=1,column=1,rowspan=3)

f3 = Frame(win,bd=2,width=200,height=250,relief=GROOVE)
f3.grid(row=1,column=2,rowspan=3)

lb1 = Label(f1,text='Big Mac')
lb1.grid(row=0,column=0,padx=10,pady=10)

am1 = IntVar()
en1 = Entry(f1,textvariable=am1,width=5)
en1.grid(row=0,column=1,padx=10,pady=10)

lb2 = Label(f1,text='Cheeseburger')
lb2.grid(row=1,column=0,padx=10,pady=10)

am2 = IntVar()
en2 = Entry(f1,textvariable=am2,width=5)
en2.grid(row=1,column=1,padx=10,pady=10)

lb3 = Label(f1,text='Nuggets')
lb3.grid(row=2,column=0,padx=10,pady=10)

am3 = IntVar()
en3 = Entry(f1,textvariable=am3,width=5)
en3.grid(row=2,column=1,padx=10,pady=10)

lb4 = Label(f1,text='Chicken')
lb4.grid(row=3,column=0,padx=10,pady=10)

am4 = IntVar()
en4 = Entry(f1,textvariable=am4,width=5)
en4.grid(row=3,column=1,padx=10,pady=10)


lb5 = Label(f2,text='Cheesecake')
lb5.grid(row=0,column=0,padx=10,pady=10)

am5 = IntVar()
en5 = Entry(f2,textvariable=am5,width=5)
en5.grid(row=0,column=1,padx=10,pady=10)

lb6 = Label(f2,text='Chocolate Cake')
lb6.grid(row=1,column=0,padx=10,pady=10)

am6 = IntVar()
en6 = Entry(f2,textvariable=am6,width=5)
en6.grid(row=1,column=1,padx=10,pady=10)

lb7 = Label(f2,text='McFlurry')
lb7.grid(row=2,column=0,padx=10,pady=10)

am7 = IntVar()
en7 = Entry(f2,textvariable=am7,width=5)
en7.grid(row=2,column=1,padx=10,pady=10)

lb8 = Label(f2,text='Pepsi')
lb8.grid(row=3,column=0,padx=10,pady=10)

am8 = IntVar()
em8 = Entry(f2,textvariable=am8,width=5)
em8.grid(row=3,column=1,padx=10,pady=10)


win.mainloop()

框架现在可以工作,但是如果我更改框架的高度和宽度,并且每次运行时大小仍然相同。我不知道出了什么问题,但我已经搜索了提到可以在开始时设置大小的书籍。那么如何使高度和宽度可调?帧的大小是否与里面的元素一起计算,或者我可以在开始时设置大小?

【问题讨论】:

  • 框架自动调整大小以适应它所包含的小部件。在你的情况下,那里什么都没有,所以框架的宽度为 0,高度为 0。框架就是,你只是看不到它。我为此写了几分钟的答案。检查stackoverflow.com/questions/63189654/trouble-using-tkinter-grid
  • 但是当我设置宽度和高度时,框架仍然没有出现,尽管我在框架内添加了一些元素,但这些元素不在框架内
  • 我看不到分配给您的框架的任何小部件。请做一个完整的例子来说明什么是错的
  • @DominicSham 您必须使用grid_propagate 禁用将框架缩小到其子项的大小。我相应地更新了我的答案。
  • 您提供的代码中没有任何地方尝试设置或更改任何内容的高度。

标签: python user-interface tkinter


【解决方案1】:

正如您在问题中所写,您通过from tkinter import * 导入了Frame。所以你不需要再次导入它。

要使窗口可见,请在脚本末尾添加 win.mainloop()

更新:

这就是你的程序在我的系统上从终端执行时的样子(并且在脚本末尾有win.mainloop())。

更新 2:

我已通过从标签中删除 columnspan 并使用 grid_propagate 禁用调整框架大小来更改此部分:

lbtitle = Label(win,text='Welcome to McDonald',bg='yellow')
lbtitle.grid(row=0,column=1)

f1 = Frame(win,bd=2,width=200,height=250,relief=GROOVE)
f1.grid(row=1,column=0,rowspan=3)
f1.grid_propagate(0)

f2 = Frame(win,bd=2,width=200,height=250,relief=GROOVE)
f2.grid(row=1,column=1,rowspan=3)
f2.grid_propagate(0)

f3 = Frame(win,bd=2,width=200,height=250,relief=GROOVE)
f3.grid(row=1,column=2,rowspan=3)
f3.grid_propagate(0)

结果如下所示:

【讨论】:

  • 这不回答问题。也不需要显式调用主循环。它只是 pythonic 的方式来做到这一点。因为显式优于隐式。
  • @Atlas435 在 IDLE 或使用 tkinter 制作的某些 IDE 中运行脚本时可能不需要,但在终端或控制台中运行脚本时绝对有必要。
  • 添加 win.mainloop() 后没有区别
  • @DominicSham 你在哪里添加的行?它必须在您添加所有小部件之后,因为该函数在窗口被子句之前不会离开。
  • @Atlas435 你是对的,有一些误解。我以为他在问为什么窗口没有出现,但似乎他在问为什么框架没有显示浮雕/凹槽。
猜你喜欢
  • 2016-06-07
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多