Табличные флажки в разных флажках - Tkinter - PullRequest
0 голосов
/ 07 декабря 2018

Я делаю графический интерфейс с Tkinter, и я пытаюсь показать флажки из двух таблиц в виде таблицы.Я попытался (как вы можете видеть в коде) проверить, была ли проблема в том, что метки были разной длины, но после добавления пробелов при необходимости;кажется, это не было проблемой.Любые идеи, почему это может происходить?

class Checkbar(Frame):
    def __init__(self, parent=None, picks={}, side=LEFT, anchor=W, list_keys=[]):
        Frame.__init__(self, parent)
        self.vars = []

        for key, value in picks.items():
            var = IntVar()
            chk = Checkbutton(self, text=self.SameLength(list_keys, key), variable=var)
            button_ttp = ToolTip(chk, value)
            chk.pack(side=side, anchor=anchor, expand=YES, )

    def SameLength(self, listStrings, word):
        return word.ljust(len(max(listStrings, key=len)), '0')

image

Как вы можете видеть на картинке, флажки хорошо сведены в таблицу и не знают, почему это происходит, так какметки имеют одинаковую длину.

Я также пытался использовать сетку вместо пакета, но все равно не работает. с использованием сетки

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Если вы пытаетесь разместить виджеты в сетке, tkinter имеет оптимизированный для этого менеджер геометрии: grid.Использование grid в этом случае предпочтительнее, чем pack, поскольку оно позволяет размещать виджеты в строках и столбцах.

0 голосов
/ 07 декабря 2018

Вместо того, чтобы заполнять текст контрольных кнопок пробелами (что не работает, потому что все символы не имеют одинаковую длину), вы можете установить ширину контрольных кнопок (в символах):

Checkbutton(.., width=maxwidth, anchor='w', ...)

где maxwidth = len(max(list_keys, key=len)).Вам также нужно установить параметр anchor на 'w', чтобы выровнять флажки слева.

Это полный код, который я использовал для проверки своего ответа:

from tkinter import *

class Checkbar(Frame):
    def __init__(self, parent=None, picks={}, side=LEFT, anchor=W, list_keys=[]):
        Frame.__init__(self, parent)
        self.vars = []
        maxwidth = len(max(list_keys, key=len))

        for key, value in picks.items():
            var = IntVar()
            chk = Checkbutton(self, text=key, variable=var, width=maxwidth, anchor='w')
            # button_ttp = ToolTip(chk, value)
            chk.pack(side=side, anchor=anchor, expand=YES, )



root = Tk()
list_keys = ['1', '2', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight']

Label(root, text='Select keyword(s):').grid(row=0, column=0)
Checkbar(root, picks={k: k for k in list_keys[:4]}, list_keys=list_keys).grid(row=0, column=1, sticky='w')
Checkbar(root, picks={k: k for k in list_keys[4:]}, list_keys=list_keys).grid(row=1, column=1, sticky='w')
root.mainloop()

, которыйдает:

screenshot

...