GUI Label,ListBox,Button出现在不同的框架中

时间:2013-10-16 06:20:43

标签: python user-interface tkinter tk

您好我正在尝试使用标签,文本框,按钮等创建一个Python GUI,下面是我的代码,工作正常。

问题:在我的按钮旁边,其余部分(标签,标签,列表框)都显示在另一个框架中。有没有办法打开并在1帧内全部显示?

from Tkinter import *
import webbrowser
import tkMessageBox
import Tkinter as Tk

def actionDirectory():
    webbrowser.open('C:\AgmPlots')

def actionOpenFile():
    print "Done"

win = Tk.Toplevel()  #Open up connection and declare button and label
frame = Tk.Frame(master=win).grid(row=1, column=1)

Lb1 = Listbox(win)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")
Lb1.pack()
button = Tk.Button(master=frame, text='Open Folder', command=actionDirectory)
button1 = Tk.Button(master=frame, text='Open Text', command=actionOpenFile)
button.pack()
button1.pack()
win.mainloop()

3 个答案:

答案 0 :(得分:1)

grid / pack不返回任何内容。

frame = Tk.Frame(master=win).grid(row=1, column=1)

执行以下行导致frameNone; Widget(master=frame, ...)之后的Widget(master=None)会导致该窗口小部件属于根窗口,而不是另一个Toplevel窗口。

将以上行替换为以下内容。

frame = Tk.Frame(master=win)
frame.pack()

现在,您将获得两个窗口,一个(根窗口),另一个使用Toplevel创建。

如果您只想要一个窗口,请替换以下

win = Tk.Toplevel()

使用:

win = Tk.Tk()

答案 1 :(得分:0)

不确定。拥有额外帧的唯一原因是因为您明确创建了一个帧。只是不要这样做。

摆脱frame = …行,你将摆脱另一个窗口。使用master=win代替master=frame将小部件放入主窗口而不是放入另一个框架。

或者,如果你想在顶层窗口中放置一个框架,不要创建一个新的Toplevel,并将一些东西放在其中,但其他东西在默认的内部。

答案 2 :(得分:0)

你可以尝试一下。

from Tkinter import *
import webbrowser
import tkMessageBox
import Tkinter as Tk

def actionDirectory():
    webbrowser.open('C:\AgmPlots')

def actionOpenFile():
    print "Done"

win = Tk.Tk()  #Open up connection and declare button and label
master=win

Lb1 = Listbox(win)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")
Lb1.pack()
button = Tk.Button(text='Open Folder', command=actionDirectory)
button1 = Tk.Button(text='Open Text', command=actionOpenFile)
button.pack()
button1.pack()
win.mainloop()