-1

从概念上讲,如果我定义 aFrame并使用它创建它grid,那么在 Frame 中我可以使用任何几何管理器吗?下面是一个MWE。我的问题是我正在尝试编写一个基本布局为 的 GUI grid,但在这些小部件中,我在设置对象时遇到了很多麻烦。我认为这可能是因为我正在通过模块。我在这里知道这个答案,它揭示了一些启示,但是如果我将一个 tk Frame 对象传递给一个类,对它做一堆 Tk 的东西,它在几何管理方面是如何处理的?

具体来说,假设我有一个基本的 gui 布局:

import Tkinter as tk
from Tkinter import Frame
from modules.subfolder.name_of_file import SomeClass

class Window(tk.Frame):
    def __init__(self, master):
        self.master = master
        self.configure_gui()
        self.create_widgets()
        self.create_modules()

    def configure_gui(self):
        self.master.wm_attributes('-fullscreen','true')
        self.master.configure(background='black')

        # in pixels
        self.screen_width = self.master.winfo_screenwidth()
        self.screen_height = self.master.winfo_screenheight()

        # max height for header and footer
        self.foot_height = 100
        self.header_above_height = 100
        self.header_below_height = 100

    def create_widgets(self):

        # Main layout - like a document, header footer, main
        self.header_above = Frame(self.master, bg='black', width = self.screen_width, height=self.header_above_height)
        self.header_below = Frame(self.master, bg='black', width = self.screen_width, height=self.header_below_height)
        self.center = Frame(self.master, bg='black', width=self.screen_width)
        self.footer = Frame(self.master, bg='black', width = self.screen_width, height = self.foot_height)

        # this makes row 1 grow first so it will push out
        # to the top and bottom
        self.master.grid_rowconfigure(2, weight=1)
        self.master.grid_columnconfigure(1, weight=1)

        self.header_above.grid(row=0, sticky="ew")
        self.header_below.grid(row=1, sticky="ew")
        self.center.grid(row=2, sticky="nsew")
        self.footer.grid(row=3, sticky="ew")

    def create_modules(self):

        # Module
        self.sub_widget = SomeClass(self.header_above)
        self.sub_widget.pack()
def main():
   root = tk.Tk()
   gui = Window(root)
   root.mainloop()

if __name__ == '__main__':
    main()

通常,我在self.sub_widget.pack(). 假设我想打包两个标签并对其进行正确调整,因此在屏幕的右侧回到其父框架header_above中。我怎样才能做到这一点。因为现在它回来了左调整。

from Tkinter import *
from PIL import Image, ImageTk

class SomeClass(Frame):
    def __init__(self, parent, *args, **kwargs):
        Frame.__init__(self, parent, bg='black')

        self.config(bg='black')

        image = Image.open('images/Moon.png')
        image = image.resize((100, 100), Image.ANTIALIAS)
        image = image.convert('RGB')
        photo = ImageTk.PhotoImage(image)

        self.display_icon = Label(self, image=photo, width=100, height=100)
        self.display_icon.pack(side=RIGHT)

        self.display_name = Label(self,text="name to display",bg='black',fg="white")
        self.display_name.pack(side=TOP)
4

1 回答 1

0

从概念上讲,如果我定义一个框架并使用网格创建它,那么在框架内我可以使用任何几何管理器吗?

是的你可以。每个小部件都可以使用它想要管理自己的孩子的任何几何管理器,而与其他小部件使用的无关。

使用或不使用模块的事实完全无关紧要。

于 2018-07-02T03:27:50.447 回答