【问题标题】:Python Tkinter not opening when using .grid()使用 .grid() 时 Python Tkinter 未打开
【发布时间】:2015-06-22 19:53:58
【问题描述】:

我正在通过在线教程学习如何使用 Tkinter 制作 GUI。但是我在使用 .grid() 函数时遇到了问题。

这是我目前所拥有的:

from Tkinter import *

root = Tk()
title = Label(root, text = "Hello World")
title.pack()

name           = Label(root, text = "Name")
password       = Label(root, text = "Password")
entry_name     = Entry(root)
entry_password = Entry(root)

name.grid           (row = 0, sticky = E)
password.grid       (row = 0, sticky = E)
entry_name.grid     (row = 0, column = 1)
entry_password.grid (row = 1, column = 1)

check = Checkbutton(root, text = "Keep me logged in")
check.grid(columnspan = 2)

root.mainloop()

所以我遇到的问题是只要我包含第一行:

name.grid(row = 0, sticky = E)

然后运行脚本,没有错误,但没有打开。该程序只是挂起,我必须关闭命令提示符才能重新获得控制权。

如果我使用 .grid() 注释掉所有行,他们的程序可以正常工作,并会打开一个窗口,里面有我的标题。

那么,有谁知道我做错了什么? 我正在使用 Python 2.7

【问题讨论】:

  • 看起来您已经在root 中使用pack()。混合几何管理器通常会产生某种错误消息,但您是否尝试过修复它?
  • 你不能使用包和网格

标签: python python-2.7 tkinter


【解决方案1】:

您不能同时将packgrid 与两个或多个共享同一父级的小部件一起使用。在您的情况下,您将pack 用于titlegrid 用于其他所有内容。使用其中一种。

【讨论】:

    【解决方案2】:

    保持网格几何管理器一致,因此使用 title.grid()。

    from tkinter import *
    
    root = Tk()
    title = Label(root, text = "Hello World")
    title.grid()
    
    name           = Label(root, text = "Name")
    password       = Label(root, text = "Password")
    entry_name     = Entry(root)
    entry_password = Entry(root)
    
    name.grid(row = 0, sticky = E)
    password.grid       (row = 0, sticky = E)
    entry_name.grid     (row = 0, column = 1)
    entry_password.grid (row = 1, column = 1)
    
    check = Checkbutton(root, text = "Keep me logged in")
    check.grid(columnspan = 2)
    
    root.mainloop()
    

    【讨论】:

    • 谢谢。初学者的错误。
    • 不用担心 - 去过那里!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多