Tkinter中可调整大小的窗口框架

时间:2018-12-19 15:44:13

标签: python python-3.x tkinter

我为我的程序创建了一个带有tkinter的窗口,但是我希望它在用户调整窗口大小时自动调整大小。现在,当我增加或减小窗口的大小时,小部件将保持在相同位置,并且不会增加/减小大小。

这是我的代码:

import tkinter as tk

class Graphicaluserinterface(tk.Frame):


    def __init__(self,master=None):
        super().__init__(master)
        self.grid()
        self.check1 = tk.IntVar()
        self.fileopenname1 = tk.StringVar()
        self.entrystring = tk.IntVar()
        self.menubar = tk.Menu(self)
        self.create_widgets()

    def create_widgets(self):
        self.filemenu=tk.Menu(self.menubar,tearoff=0)
        self.menubar.add_cascade(label="File",menu=self.filemenu)
        self.filemenu.add_command(label="Exit",command = root.destroy)
        self.helpmenu=tk.Menu(self.menubar,tearoff=0)

        self.programmstart = tk.Button(self, text = "Start Program")
        self.programmstart.grid(row=10,column=8,sticky = "W")

        self.checkbutton1 = tk.Checkbutton(self, text = "Drehzahl und Drehmoment",variable=self.check1,onvalue=1,offvalue=0)
        self.checkbutton1.grid(row=0,column=0,columnspan=3,sticky = "W")

        self.leer1 = tk.Label(self,text="                               ") #erzeugt leere Zelle, sonst ist startbutton links
        self.leer1.grid(row=0,column=3,columnspan=5)
        self.leer2 = tk.Label(self,text="                               ")
        self.leer2.grid(row=5,column=8,rowspan=2)
        self.leer3 = tk.Label(self,text="                               ")
        self.leer3.grid(row=9,column=9)

        self.inputpathdisplay = tk.Label(self,textvariable=self.fileopenname1,bg="white",width=60)
        self.inputpathdisplay.grid(row=1,column=8,columnspan=3,sticky = "W")
        self.inputpathdisplaylabel = tk.Label(self,text="Inputfile")
        self.inputpathdisplaylabel.grid(row=0,column=8,columnspan=3)


root = tk.Tk()
app = Graphicaluserinterface(master=root)
app.master.title("Programm")
app.master.minsize(800,300)
root.config(menu=app.menubar)
app.mainloop()

1 个答案:

答案 0 :(得分:1)

您需要在网格的行和列上配置权重。以下是代码的重构版本,应按您希望的那样工作。请从以下代码继续开发:

#! /usr/bin/env python3
import tkinter
from tkinter.constants import *


class GraphicalUserInterface(tkinter.Frame):

    @classmethod
    def main(cls):
        root = tkinter.Tk()
        root.title('Program')
        root.minsize(560, 105)
        gui = cls(root)
        gui.grid(row=0, column=0, sticky=NSEW)
        root.grid_rowconfigure(0, weight=1)
        root.grid_columnconfigure(0, weight=1)
        root['menu'] = gui.menubar
        cls.create_toplevel(root, 'First Toplevel')
        root.mainloop()

    @staticmethod
    def create_toplevel(root, window_title):
        window = tkinter.Toplevel(root)
        window.title(window_title)
        window.minsize(560, 105)

    def __init__(self, master=None):
        super().__init__(master)
        self.check_value = tkinter.BooleanVar()
        self.filename = tkinter.StringVar()
        self.menubar = tkinter.Menu(self)
        self.file_menu = tkinter.Menu(self.menubar, tearoff=FALSE)
        self.help_menu = tkinter.Menu(self.menubar, tearoff=FALSE)
        self.program_start = tkinter.Button(
            self, text='Start Program',
            command=lambda: self.create_toplevel(self.master, 'Another Window')
        )
        self.check_button = tkinter.Checkbutton(
            self, text='Speed ​​& Torque', variable=self.check_value,
            onvalue=True, offvalue=False
        )
        self.input_path_display = tkinter.Label(
            self, textvariable=self.filename, bg='white', width=60
        )
        self.input_path_display_label = tkinter.Label(self, text='Input File')
        self.create_widgets()

    def create_widgets(self):
        self.menubar.add_cascade(label='File', menu=self.file_menu)
        self.file_menu.add_command(label='Exit', command=self.master.destroy)
        pad = dict(padx=5, pady=5)
        self.check_button.grid(row=0, column=0, **pad)
        self.input_path_display_label.grid(row=0, column=1, sticky=EW, **pad)
        self.input_path_display.grid(row=1, column=1, sticky=NSEW, **pad)
        self.program_start.grid(row=2, column=1, sticky=EW, **pad)
        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(1, weight=1)


if __name__ == '__main__':
    GraphicalUserInterface.main()