Как получить размеры моего кадра в соответствии с размером моего корневого окна? - PullRequest
0 голосов
/ 03 февраля 2019

Я делаю текстовую игру.Я использовал виджет ввода для ввода игрока, текстовый виджет для вывода игры и поместил их в рамки.Я установил геометрию корневого окна и размеры рамки, чтобы соответствовать этой геометрии.Тем не менее, размеры кадра меньше, чем ожидалось.В частности, мой story_text_frame короче, чем ожидалось.Я сделал учебник, и я не уверен, что мне не хватает сейчас.

import tkinter as tk

class Game(tk.Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args,**kwargs)
        self.geometry('1280x720')

        self.player_input_frame = tk.Frame(self, height=20, width=625)
        self.player_input_field = tk.Entry(self.player_input_frame, background='black', foreground='white', relief='flat')
        self.player_input_field.grid(row=0, column=0)
        self.player_input_frame.grid(row=2, column=1)

        self.story_text_frame = tk.Frame(self, height=670, width=625)
        self.story_text_field = tk.Text(self.story_text_frame, background='grey', foreground='white')
        self.story_text_field.grid(row=0, column=0)
        self.story_text_frame.grid(row=1, column=1)

1 Ответ

0 голосов
/ 03 февраля 2019

Чтобы размер виджета соответствовал размеру основного виджета или окна, вы должны указать, как это сделать с columnconfigure() и rowconfigure().Затем необходимо развернуть виджет, чтобы заполнить доступное пространство ячейки, указав grid() придерживаться краев;sticky='nsew'.Смотрите мой пример:

import tkinter as tk

class Game(tk.Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args,**kwargs)
        self.geometry('800x600')
        self.columnconfigure(0, weight=1)  # Specify how columns and rows will 
        self.rowconfigure(0, weight=1)     # change when window size changes.

        # The game's output Text() widget
        self.story_text_field = tk.Text(self)
        self.story_text_field.grid(row=0, column=0, sticky='nsew',
            pady=10, padx=10)  # Sticky expands the widget to fill the cell

        # The player input Entry() widget
        self.player_input_field = tk.Entry(self)
        self.player_input_field.grid(row=1, column=0, pady=(0,10))

Game().mainloop()

Я удалил Рамки, чтобы сделать конструкцию более понятной.Также я убрал раскраску виджетов.Я ввел некоторые отступы, чтобы сделать результат более приятным для глаз, и изменил размер окна, чтобы его было легче обрабатывать на крошечном экране.

Для получения дополнительной информации о grid() Я могу порекомендовать effbot's Tkinter Grid Geometry Manager .Вы также можете прочитать Mike - ответ SMT на Найти позицию другого якоря, отличного от уже используемого якоря , который касается как grid(), так и pack().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...