与ttk小部件一起使用网格时崩溃

时间:2018-08-14 15:52:02

标签: python python-2.7 tkinter ttk

我需要在python 2.7上使用Tkinter / ttk制作的gui的特定布局,这就是为什么我想使用网格定位器来掌握ttk小部件的相对位置的原因。但是每次我运行代码时,都不会显示任何内容。

ps:我将一些小部件与grid()一起使用,将另一些与pack()一起使用

我不知道问题出在哪里!这是代码:

from Tkinter import *
import ttk
master = Tk()

f4=Frame(master,width=300,height=300,bg="powder blue",relief=SUNKEN)
f4.pack(side=BOTTOM,fill=BOTH, expand=True)
test = True
f3=Frame(master,width=300,height=300,bg="red",relief=SUNKEN)
f3.pack(side=TOP,fill=BOTH, expand=True)
def create():
    global test
    if test:
        global e
        e = ttk.Entry(f4).grid(row=2,column=0, columnspan=2)
    test = False

#e.focus_set()

def callback():
    print e.get()

b = Button(master, text="get", width=10, command=callback)
b.grid(row=0, column=0)
c = Button(master, text="set", width=10, command=callback)
c.grid(row=0, column=1)
create()
mainloop()

1 个答案:

答案 0 :(得分:2)

您的问题是在pack()窗口上同时使用grid()master

在每个容器中使用一个或另一个。

容器是root主窗口,Toplevel()窗口或Frame窗口。

尝试不使用pack()进行以下操作:

from Tkinter import *
import ttk

master = Tk()
master.rowconfigure(0, weight=1)
master.columnconfigure(0, weight=1)
master.columnconfigure(1, weight=1)

f3=Frame(master,width=300,height=300,bg="red",relief=SUNKEN)
f3.grid(row=0, column=0, columnspan=2, sticky="nsew")

f4=Frame(master, width=300, height=300, bg="powder blue", relief=SUNKEN)
f4.grid(row=1, column=0, columnspan=2, sticky="nsew")

test = True

def create():
    global test
    if test:
        global e
        e = ttk.Entry(f4).grid(row=2,column=0, columnspan=2)
    test = False

def callback():
    print e.get()

b = Button(master, text="get", width=10, command=callback)
b.grid(row=2, column=0, sticky="e")

c = Button(master, text="set", width=10, command=callback)
c.grid(row=2, column=1,  sticky="w")

create()
master.mainloop()

这是仅使用pack()的版本。

我对其进行了一些更改,以提供可能与您尝试的布局更接近的其他布局。

from Tkinter import *
import ttk


master = Tk()

f3 = Frame(master, width=300, height=300, bg="red", relief=SUNKEN)
f3.pack(side=TOP, fill=BOTH, expand=True)

f4 = Frame(master, width=300, height=300, bg="powder blue", relief=SUNKEN)
f4.pack(side=TOP, fill=BOTH)

f5 = Frame(master, width=300)
f5.pack(side=BOTTOM, fill=BOTH)

test = True

def create():
    global test
    if test:
        global e
        e = ttk.Entry(f4).pack(side=TOP,fill=BOTH)
    test = False

def callback():
    print e.get()

b = Button(f5, text="get", width=10, command=callback)
b.pack(side=LEFT, fill=BOTH, expand=True)
c = Button(f5, text="set", width=10, command=callback)
c.pack(side=RIGHT, fill=BOTH, expand=True)

create()
master.mainloop()