您好我正在尝试使用标签,文本框,按钮等创建一个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()
答案 0 :(得分:1)
grid
/ pack
不返回任何内容。
frame = Tk.Frame(master=win).grid(row=1, column=1)
执行以下行导致frame
为None
; 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()