当用户调整风的大小时,pythontkinter小部件的大小会不均匀

2024-10-01 16:44:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个模板,我看到在youtube视频我的应用程序。我用三个框架把窗户分成三块。所有3个帧都嵌套到一个主帧中。主框架直接连接到根窗口。你知道吗

我使用packmanager将大型机放在根窗口中。 我使用gridmanager将3个框架放置在主机中。你知道吗

我面临的问题是,当我试图调整窗口的大小时,左边的框架比其他两个框架的大小要大,我不明白为什么会发生这种情况。我需要调整帧大小成比例的相互。为什么左边的帧比其他帧调整的更多?我该怎么纠正呢?你知道吗

import tkinter as tk
from tkinter import ttk

Normal_Font = ('Verdana', 9)
Large_font = ('Verdana', 12)


class MainApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        mainframe = tk.Frame(self)
        mainframe.pack(side='top', fill='both', expand=True)
        mainframe.grid_rowconfigure(0, weight=1)
        mainframe.grid_columnconfigure(0, weight=1)
        #mainframe.grid(row=0, column=0, sticky='nesw')

        #left frame
        employerframe = tk.Frame(mainframe)
        employerframe.grid(row=0, column=0, sticky='nesw')
        employerframe.grid_rowconfigure(0, weight=1)
        employerframe.grid_columnconfigure(0, weight=1, uniform=1)
        label1 = tk.Label(employerframe, text='Employer Frame', font=Large_font)
        label1.grid(row=0, column=0, sticky='nesw')

        ttk.Separator(mainframe, orient=tk.VERTICAL) .grid(row=0, column=1, sticky='ns')

        #right frame
        candidateframe = tk.Frame(mainframe)
        candidateframe.grid(row=0, column=4, sticky='nesw')
        candidateframe.grid_rowconfigure(0, weight=1)
        candidateframe.grid_columnconfigure(0, weight=1, uniform=1)
        label2 = tk.Label(candidateframe, text='Candidate Frame', font=Large_font)
        label2.grid(row=0, column=0, sticky='nesw')

        ttk.Separator(mainframe, orient=tk.VERTICAL) .grid(row=0, column=3, sticky='ns')

        #middle frame
        container = tk.Frame(mainframe)
        container.grid(row=0, column=2, sticky='nesw')
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1, uniform=1)

        self.frames = {}
        frame = StartPage(container, self)
        self.frames[StartPage] = frame
        frame.grid(row=0, column=0, sticky='nesw')
        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text='Start Page', font=Large_font)
        label.pack(pady=10, padx=10)

app = MainApp()
app.mainloop()

Tags: self框架columnframetkgridrowfont
1条回答
网友
1楼 · 发布于 2024-10-01 16:44:04

这是因为你把employerframecontainercandidateframe放到column=0column=2column=4。但是只给weight=1column=0。您还必须添加以下行以使列0、2、4具有相等的权重。你知道吗

mainframe.grid_columnconfigure(2, weight=1)
mainframe.grid_columnconfigure(4, weight=1) 

试试这个:

import tkinter as tk
from tkinter import ttk

Normal_Font = ('Verdana', 9)
Large_font = ('Verdana', 12)

class MainApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        mainframe = tk.Frame(self)
        mainframe.pack(side='top', fill='both', expand=True)
        mainframe.grid_rowconfigure(0, weight=1)
        mainframe.grid_columnconfigure(0, weight=1)
        #   - Added lines   -
        mainframe.grid_columnconfigure(2, weight=1)
        mainframe.grid_columnconfigure(4, weight=1)

        #left frame
        employerframe = tk.Frame(mainframe)
        employerframe.grid(row=0, column=0, sticky='nesw')
        label1 = tk.Label(employerframe, text='Employer Frame', font=Large_font)
        label1.grid(row=0, column=0, sticky='nesw')

        ttk.Separator(mainframe, orient=tk.VERTICAL) .grid(row=0, column=1, sticky='ns')

        #right frame
        candidateframe = tk.Frame(mainframe)
        candidateframe.grid(row=0, column=4, sticky='nesw')
        label2 = tk.Label(candidateframe, text='Candidate Frame', font=Large_font)
        label2.grid(row=0, column=0, sticky='nesw')

        ttk.Separator(mainframe, orient=tk.VERTICAL) .grid(row=0, column=3, sticky='ns')

        #middle frame
        container = tk.Frame(mainframe)
        container.grid(row=0, column=2, sticky='nesw')

        self.frames = {}
        frame = StartPage(container, self)
        self.frames[StartPage] = frame
        frame.grid(row=0, column=0, sticky='nesw')
        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text='Start Page', font=Large_font)
        label.pack(pady=10, padx=10)

app = MainApp()
app.mainloop()

相关问题 更多 >

    热门问题