gpt4 book ai didi

python - 使用 python tkinter 布置框架时出现问题(框架内的框架使父框架不可见)

转载 作者:行者123 更新时间:2023-11-28 18:01:20 25 4
gpt4 key购买 nike

我正在使用 python 制作一个小应用程序(供个人使用/培训),但我无法理解 tkinter 的框架模块是如何工作的。到目前为止,我所做的只是尝试放置彩色方 block 以在视觉上“映射”窗口,但我已经遇到了问题。

  • 我已将“主”窗口框架设置为绿色(600*400 大小,可调整大小)
  • 一个黄色的容器框架(600*400,这样它应该覆盖整个窗口,这样我们在调整窗口大小时可以看到主窗口的绿色背景)
  • 第三个蓝色框架包含在黄色框架中 (450*400)

问题是,每当我尝试“打印”蓝色框架时,黄色框架就不会。

import tkinter

class leftFrame(tkinter.Frame):
def __init__(self, parent):
self.frame = tkinter.Frame(parent, width=450, height=400, bg="blue")
self.parent = parent
self.initialize()

def initialize(self):
self.frame.grid()
#if I comment this previous line, the yellow frame will be printed
#pass


class mainFrame(tkinter.Frame):
def __init__(self, master=None):
self.frame = tkinter.Frame(master, width=600, height=400, bg="yellow")
self.master = master
self.initialize()

def initialize(self):
self.frame.grid()
self.left = leftFrame(self.frame)


root = tkinter.Tk()
root.geometry("600x400")
root.wm_title("Tkinter test")
root.configure(bg="green")
#root.resizable(False, False)

app = mainFrame(root)

root.mainloop()

我已经使用类来处理我的“布局对象”,因为它似乎是一种更简洁的方法,但由于我是 python 和对象编程的新手,所以如果有人愿意解释的话,我可能在那里做错了什么我为什么这段代码不起作用这将是一个很大的帮助!谢谢 ;)

最佳答案

根的背景最终被您插入的两个框架覆盖。
我建议如下:

-> 插入了一个占位符标签以偏移内部框架,因此您可以看到根的背景颜色。

import tkinter as tk


class InnerFrame(tk.Frame):
"""A tk.Frame to be inserted in a container
"""
def __init__(self, master, **kwargs):
super().__init__(master, **kwargs)
self.master = master


class MainFrame(tk.Frame):
"""Container for two InnerFrame
"""
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.left_frame = InnerFrame(self, width=450, height=400, bg="blue")
self.left_frame.grid(row=0, column=0)
self.right_frame = InnerFrame(self, width=450, height=400, bg="green")
self.right_frame.grid(row=0, column=1)


class App(tk.Tk): # NOTE: not a tk.Frame
"""A tk.root that contains the entire GUI app
"""
def __init__(self, title, color, width, height):
super().__init__()
self.title(title)
self.configure(bg=color)
self.geometry(f'{width}x{height}')

self.placeholder_label = tk.Label(self, text='placeholder')
self.placeholder_label.grid(row=1, column=0)

self.mainframe = MainFrame(self)
self.mainframe.grid()


# create and launch
App(title='Tkinter test', color='yellow', width=900, height=400).mainloop()

OSX 方面:

enter image description here

关于python - 使用 python tkinter 布置框架时出现问题(框架内的框架使父框架不可见),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55544979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com