基于OOP的Tkinter代码修改请求:将Button 1放置到第二个Frame中
解决方法:将按钮放入红色Frame中
没问题,我帮你调整这段Tkinter代码,实现把Button 1放到红色的frame_button里。这里有两个关键细节需要修正:
- 注意Frame对象的赋值方式:原代码里直接把
Frame(...).grid()赋值给self.frame_button,但grid()方法返回的是None,这样后续没法把按钮挂载到这个Frame上。得先创建Frame实例,再单独调用grid()布局。 - 修改按钮的父容器:把Button的第一个参数从
master改成self.frame_button,让按钮成为这个红色Frame的子组件。
修改后的完整代码如下:
from tkinter import * root = Tk() class Graphic(): def __init__(self, master): self.colour = "blue" # 先创建Frame实例,再单独调用grid self.frame_input = Frame(master, height=100, width=100, bg="green") self.frame_input.grid(row=0, column=0) self.label_process = Label(master, width=30) self.label_process.grid(row=1, column=0) # 同样,先实例化红色Frame,再布局 self.frame_button = Frame(master, height=100, width=100, bg="red") self.frame_button.grid(row=2, column=0) # 把按钮的父容器改成self.frame_button self.button = Button(self.frame_button, text="1", bg=self.colour) self.button.grid(row=0, column=0) if '__main__' == __name__: grafic = Graphic(root) root.mainloop()
这样修改后,Button 1就会显示在红色的Frame里了。另外,建议你以后都采用“先创建组件实例,再单独调用布局方法”的方式,这样能避免因为布局方法返回None而导致的组件引用问题。
内容的提问来源于stack exchange,提问作者Student




