Python 3.x 使用方法时为什么tkinter窗口不打开;网格();?

Python 3.x 使用方法时为什么tkinter窗口不打开;网格();?,python-3.x,tkinter,Python 3.x,Tkinter,我试图将按钮添加到正确的框架中,但由于某种原因,当我运行程序时,IDE显示它正在运行,但没有 没有窗户。当我删除.grid(行=1,列=1)时,窗口出现。 如何修复此错误,并将btn\u clear\u url按钮添加到右侧框架?当您将小部件放置在tk窗口中时,您不能在同一窗口中同时使用grid和pack,因此您应该使用pack()而不是grid()在tk窗口中放置小部件时,您不能在同一窗口中同时使用网格和打包,因此您应该使用pack()而不是grid() 首先,您需要在代码末尾调用Tk的mai

我试图将按钮添加到正确的框架中,但由于某种原因,当我运行程序时,IDE显示它正在运行,但没有 没有窗户。当我删除
.grid(行=1,列=1)
时,窗口出现。
如何修复此错误,并将
btn\u clear\u url
按钮添加到右侧框架?

当您将小部件放置在tk窗口中时,您不能在同一窗口中同时使用grid和pack,因此您应该使用pack()而不是grid()

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

  • 首先,您需要在代码末尾调用
    Tk
    mainloop
    (您可以看到原因)
  • 另一个问题是像这样链接方法调用。实际上,您正在为变量分配最后一次调用的返回值,如果是
    grid()
    pack()
    ,则返回值为
    None
    ——因此,所有变量的值都是
    None
    。您需要将小部件实例化调用和
    grid
    pack
    调用分开,并将它们放在各自的行中
  • 除此之外,您正在将
    minsize
    maxsize
    设置为相同的大小-如果您真的只是想让窗口无法调整大小,请使用以下设置大小:

    from tkinter import *
    
    # ==================================================Settings=======================================================
    root = Tk()
    root.title("Video Youtube Downloader") # set up the title and size.
    root.configure(background='black') # set up background.
    root.minsize(800, 500)
    root.maxsize(800, 500)
    # ==================================================Frames=======================================================
    top = Frame(root, width=800, height=50,  bg='yellow').pack(side=TOP)
    bottom = Frame(root, width=800, height=50,  bg='red').pack(side=BOTTOM)
    left = Frame(root,  width=550, height=450, bg='black').pack(side=LEFT)
    right = Frame(root, width=250, height=450, bg='blue').pack(side=RIGHT)
    
    
    
    # ==================================================Buttons=======================================================
    btn_clear_url = Button(right, text="Clear Url", font=('arial', 10, 'bold')).grid(row=1, columns=1)
    
    …然后配置
    可调整大小的属性:

    root.geometry('800x500') # for instance
    
  • 另外,我建议您从tkinter import*中去掉
    ,因为您不知道导入的是什么名称。它可以替换您先前导入的名称,并且很难判断程序中的名称应该来自何处。改用
    导入tkinter作为tk
      • 首先,您需要在代码末尾调用
        Tk
        mainloop
        (您可以看到原因)
      • 另一个问题是像这样链接方法调用。实际上,您正在为变量分配最后一次调用的返回值,如果是
        grid()
        pack()
        ,则返回值为
        None
        ——因此,所有变量的值都是
        None
        。您需要将小部件实例化调用和
        grid
        pack
        调用分开,并将它们放在各自的行中
      • 除此之外,您正在将
        minsize
        maxsize
        设置为相同的大小-如果您真的只是想让窗口无法调整大小,请使用以下设置大小:

        from tkinter import *
        
        # ==================================================Settings=======================================================
        root = Tk()
        root.title("Video Youtube Downloader") # set up the title and size.
        root.configure(background='black') # set up background.
        root.minsize(800, 500)
        root.maxsize(800, 500)
        # ==================================================Frames=======================================================
        top = Frame(root, width=800, height=50,  bg='yellow').pack(side=TOP)
        bottom = Frame(root, width=800, height=50,  bg='red').pack(side=BOTTOM)
        left = Frame(root,  width=550, height=450, bg='black').pack(side=LEFT)
        right = Frame(root, width=250, height=450, bg='blue').pack(side=RIGHT)
        
        
        
        # ==================================================Buttons=======================================================
        btn_clear_url = Button(right, text="Clear Url", font=('arial', 10, 'bold')).grid(row=1, columns=1)
        
        …然后配置
        可调整大小的属性:

        root.geometry('800x500') # for instance
        
      • 另外,我建议您从tkinter import*中去掉
        ,因为您不知道导入的是什么名称。它可以替换您先前导入的名称,并且很难判断程序中的名称应该来自何处。改用
        导入tkinter作为tk

      问题从这一行代码开始:

      root.resizable(width=False, height=False) 
      
      这样,
      right
      设置为
      None
      ,因为
      .pack(side=right)
      返回
      None

      接下来,您将执行以下操作:

      right = Frame(root, width=250, height=450, bg='blue').pack(side=RIGHT)
      
      因为
      right
      None
      ,所以它与
      按钮(根,…)
      相同。由于您已经在
      根目录下为小部件使用
      pack
      ,因此也不能使用
      网格

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

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

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

      问题从这行代码开始:

      root.resizable(width=False, height=False) 
      
      这样,
      right
      设置为
      None
      ,因为
      .pack(side=right)
      返回
      None

      接下来,您将执行以下操作:

      right = Frame(root, width=250, height=450, bg='blue').pack(side=RIGHT)
      
      因为
      right
      None
      ,所以它与
      按钮(根,…)
      相同。由于您已经在
      根目录下为小部件使用
      pack
      ,因此也不能使用
      网格

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

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

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

      请显示。在你发布的代码中没有任何东西会导致你描述的行为。我认为@mentalita指出的错误是我在同一行中使用了“.pack(side=TOP)”。因此,在不加载窗口的同时添加“.grid(行=1,列=1)”时,请显示。在你发布的代码中没有任何东西会导致你描述的行为。我认为@mentalita指出的错误是我在同一行中使用了“.pack(side=TOP)”。因此,在不加载窗口的同时添加“.grid(行=1,列=1)”时。