在下面的示例中,我尝试在 MainW() 中使用 Frame1()。我尝试了以下代码的许多变体。问题是框架对象颜色和行跨度根本没有改变。我知道在 MainW() 中使用 Frame1() 存在问题。有人可以指出错误吗?
from tkinter import *
class Frame1(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, bg="red")
self.parent = parent
self.widgets()
def widgets(self):
self.text = Text(self)
self.text.insert(INSERT, "Hello World\t")
self.text.insert(END, "This is the first frame")
self.text.grid(row=0, column=0)
class MainW(Tk):
def __init__(self, parent):
Tk.__init__(self, parent)
self.parent = parent
self.mainWidgets()
def mainWidgets(self):
self.label = Label(self, text="Main window label")
self.label.grid(row=0, column=0)
self.window = Frame1(self)
self.window.grid(row=0, column=10, rowspan=2)
if __name__=="__main__":
app = MainW(None)
app.mainloop()
这是不是我想要的输出。我需要框架的背景红色和 rowspan 为 1:
谢谢
最佳答案
您看不到框架颜色,因为您放置了填充所有框架的小部件。
如果添加边距( padx
、 pady
),则可以看到框架颜色。
self.text.grid(row=0, column=0, padx=20, pady=20)
你看不到
rowspan
因为你有空 cell
是第二行。空单元格没有宽度和高度。在第二行添加 Label,将看到 rowspan
是如何工作的。from tkinter import *
class Frame1(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, bg="red")
self.parent = parent
self.widgets()
def widgets(self):
self.text = Text(self)
self.text.insert(INSERT, "Hello World\t")
self.text.insert(END, "This is the first frame")
self.text.grid(row=0, column=0, padx=20, pady=20) # margins
class MainW(Tk):
def __init__(self, parent):
Tk.__init__(self, parent)
self.parent = parent
self.mainWidgets()
def mainWidgets(self):
self.label1 = Label(self, text="Main window label", bg="green")
self.label1.grid(row=0, column=0)
self.label2 = Label(self, text="Main window label", bg="yellow")
self.label2.grid(row=1, column=0)
self.window = Frame1(self)
self.window.grid(row=0, column=10, rowspan=2)
if __name__=="__main__":
app = MainW(None)
app.mainloop()
关于python - 在 Python tkinter 的 Tk 类中使用 Frame 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35051463/