2017-10-15 56 views
0
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) 

我想将按钮添加到正确的框架,但由于某种原因,当我运行该程序时,IDE显示它正在运行,但没有窗口 。当我删除.grid(row=1, columns=1)时出现窗口。 如何修复此错误,并将btn_clear_url按钮添加到正确的Frame?为什么使用方法“grid()”时tkinter窗口不会打开?

+0

请显示[mcve]。您发布的代码只会导致您描述的行为。 –

+0

我认为@mentalita指出的错误是我在同一行使用“.pack(side = TOP)”。因此,在窗口未加载的同时添加“.grid(row = 1,columns = 1)”时。 –

回答

0

当您将小部件,你不能在同一个窗口使用网格线和包在同一时间tk的窗口,让你用应该使用包()代替电网()

2
  • 首先,您需要在代码末尾调用Tkmainloop(您可以看到here为什么)。
  • 另一个问题是像这样的链接方法调用。实际上,您将最后一次调用的返回值分配给变量,如果是grid()pack(),则返回值为None - 因此,所有变量的最终值都为None。您需要将实例化调用的小部件与gridpack调用分开,并将它们放在一行中。
  • 除此之外,你同时设置minsizemaxsize到非常相同的大小 - 如果你真的只是试图让你的窗口不调整大小,设定大小:

    root.geometry('800x500') # for instance 
    

    .. 。而该配置resizable属性之后:

    root.resizable(width=False, height=False) 
    
  • 另外,我建议你摆脱from tkinter import *,因为你不知道什么名字是进口。它可以替换您之前导入的名称,并且很难分辨程序中的名称应该来自哪里。改为使用import tkinter as tk
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将不再失败。

相关问题