为什么使用方法" grid()"时tkinter窗口无法打开?

时间:2017-10-15 22:51:29

标签: python-3.x tkinter

.grid(row=1, columns=1)

我正在尝试向右侧框架添加按钮,但出于某种原因,当我运行该程序时,IDE显示它正在运行但是有 没有窗户。当我删除btn_clear_url时,会出现窗口。 如何修复此错误,并将{{1}}按钮添加到右侧框架?

3 个答案:

答案 0 :(得分:2)

  • 首先,您需要在代码末尾调用Tk的{​​{1}}(您可以看到here为什么)。
  • 另一个问题是像这样链接方法调用。您实际上正在为变量分配最后一次调用的返回值,如果mainloopNone,则为grid() - 因此,您的所有变量最终都有pack()作为价值。您需要将小部件实例化调用和Nonegrid调用分开,并将每个调用放在自己的行上。
  • 除此之外,您将packminsize设置为相同的大小 - 如果您真的只是想让窗口无法调整大小,请设置大小:

    maxsize

    ...然后配置root.geometry('800x500') # for instance 属性:

    resizable
  • 另外,我建议你摆脱root.resizable(width=False, height=False) ,因为你不知道导入的是什么名字。它可以替换您之前导入的名称,这使得很难确定程序中的名称应该来自何处。请改用from tkinter import *

答案 1 :(得分:0)

当您在tk窗口中放置窗口小部件时,您无法在同一窗口中同时使用网格和打包,因此您应该使用pack()而不是grid()

答案 2 :(得分:0)

问题始于这行代码:

right = Frame(root, width=250, height=450, bg='blue').pack(side=RIGHT)

有了这个,right设置为None,因为.pack(side=RIGHT)会返回None

接下来,你这样做:

btn_clear_url = Button(right, ...)).grid(row=1, columns=1)

由于rightNone,因此与Button(root, ...)相同。由于您已在pack中使用root小部件,因此您也无法使用grid

解决方案 - 以及最佳实践 - 将小部件创建与小部件布局分开:

top = Frame(root, width=800, height=50,  bg='yellow')
bottom = Frame(root, width=800, height=50,  bg='red')
left = Frame(root,  width=550, height=450, bg='black')
right = Frame(root, width=250, height=450, bg='blue')

top.pack(side=TOP)
bottom.pack(side=BOTTOM)
left.pack(side=LEFT)
right.pack(side=RIGHT)

通过以上操作,right将正确设置为框架实例,并且向right添加窗口小部件并使用grid将不再失败。