Текстовый виджет Tkinter искажает размер столбца - PullRequest
2 голосов
/ 02 мая 2019

Я не могу упаковать виджеты в строки или столбцы, как на картинке, вы можете мне помочь? введите описание изображения здесь

проблема в том, что текстовый виджет искажает размер столбца, текст не должен быть в строке = 3, столбец = 0? введите описание изображения здесь

   def _formato(self):
    t1=tkinter.Toplevel(self._finestra)
    labelTop = tkinter.Label(t1,text = "Tipo di carattere")
    labelTop.grid(row=0, column=0)
    labelTop2 = tkinter.Label(t1,text = "Dimensione")
    labelTop2.grid(row=0, column=1)
    labelTop3 = tkinter.Label(t1)
    labelTop3.grid(row=2, column=0)
    listaFont=tkinter.ttk.Combobox(t1)
    allfonts = sorted(tkinter.font.families())
    listaFont["values"] =  allfonts
    listaFont.grid(row=1, column=0)
    listaFont.bind("<<ComboboxSelected>>", None)
    listaDimensione = tkinter.ttk.Combobox(t1)
    allfontsizes = list(range(8,70))
    listaDimensione['values'] =  allfontsizes
    listaDimensione.grid(row=1, column=1)
    testo= tkinter.Text(t1)
    testo.insert(tkinter.INSERT,'AaBbYyZz')
    testo.grid(row=3,column=0)

1 Ответ

0 голосов
/ 03 мая 2019

Вопрос : все виджеты в одном и том же column должны иметь равные width.

Ядро, используйте Frame для каждого столбцаи размещать виджеты в Frame.
Это позволяет всем виджетам изменять размер до Frame width.
enter image description here


  1. Определите class App для демонстрационных целей

    class App(tk.Tk):
        def __init__(self):
            super().__init__()
    
  2. Чтобы получить равное width, используйте tk.Frame для каждого столбца.
    Разрешите Frame увеличить егоwidth.
    Разрешить виджетам внутри Frame увеличить его width.
    Определить Frame, чтобы вырасти до App width.

            # column 0
            self.grid_columnconfigure(0, weight=1)
            frame_0 = tk.Frame(self)
            frame_0.grid_columnconfigure(0, weight=1)
            frame_0.grid(row=0, column=0, sticky='nsew')
    
  3. Добавить виджеты ...
    Определить каждый виджет, чтобы увеличить его width до Frame width.

            labelTop = tkinter.Label(frame_0, text="Tipo di carattere")
            labelTop.grid(row=0, column=0, sticky='ew')
    
            listaFont = tkinter.ttk.Combobox(frame_0)
            listaFont.grid(row=1, column=0, sticky='ew')
            allfonts = sorted(tkinter.font.families())
            listaFont["values"] = allfonts
            listaFont.bind("<<ComboboxSelected>>", None)
    
  4. Примечание : Сброс настроек по умолчанию с помощью width=1

            testo = tkinter.Text(frame_0, width=1)
            testo.insert(tkinter.INSERT, 'AaBbYyZz')
            testo.grid(row=3, column=0, sticky='ew')
    
  5. То же самое для столбца 1 ...

            # column 1
            self.grid_columnconfigure(1, weight=1)
            frame_1 = tk.Frame(self)
            frame_1.grid_columnconfigure(0, weight=1)
            frame_1.grid(row=0, column=1, sticky='nsew')
    
            labelTop2 = tkinter.Label(frame_1, text="Dimensione")
            labelTop2.grid(row=0, column=0, sticky='ew')
    
            listaDimensione = tkinter.ttk.Combobox(frame_1)
            allfontsizes = list(range(8, 70))
            listaDimensione['values'] = allfontsizes
            listaDimensione.grid(row=1, column=0, sticky='ew')
    

Использование :

    if __name__ == "__main__":
        App().mainloop()

Протестировано на Python: 3,5

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