изменяемый размер оконной рамы в tkinter - PullRequest
0 голосов
/ 19 декабря 2018

Я создал окно с 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 голосов
/ 19 декабря 2018

Вам необходимо настроить вес строк и столбцов вашей сетки.Ниже приведена реорганизованная версия вашего кода, которая должна работать немного больше, чем вы надеялись.Пожалуйста, продолжайте разработку с этого кода:

#! /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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...