Добавление вставки запроса заполнения в список - PullRequest
0 голосов
/ 20 марта 2019

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

Когда запрос завершен и вставка данных в список завершена, я не могу заставить его вставить поле данных на 1 символьное пространство.

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

Виджет:

output = tkinter.Listbox(window_2, height = 20, font='Times 10',
width=42, bd=1, bg = '#FFD599', fg = '#9A0615', selectmode=SINGLE)

output.pack()
output.place(x=210, y=195)

Я безуспешно пробовал padx и pady с pack (), хотя это успешно работает с виджетом «Текст». Я также попытался использовать несколько альтернатив, которые я нашел здесь на сайте, но все безуспешно, чтобы заполнить поле списка при вставке данных.

Любой совет?

Ответы [ 2 ]

1 голос
/ 20 марта 2019
Опции

pack padx/pady и ipadx/ipady не влияют на данные, которые находятся внутри списка.Само окно списка не имеет никаких опций для добавления внутреннего поля.

Чтобы получить поле вокруг внутренней части списка, я обычно делаю ноль borderwidth и highlightthickness, изатем поместите его в рамку с тем же цветом фона, и пусть рамка станет границей.Затем вы можете добавить любой отступ между границей и списком.

Это также удобно, потому что вы можете поместить полосу прокрутки внутри рамки, создавая видимость, что она находится внутри списка, фактически не находясь внутри списка.

Пример:

import tkinter as tk

root = tk.Tk()
root.configure(background="gray")
listbox_border = tk.Frame(root, bd=1, relief="sunken", background="white")
listbox_border.pack(padx=10, pady=10, fill=None, expand=False)

listbox = tk.Listbox(listbox_border, width=20, height=10,
                     borderwidth=0, highlightthickness=0,
                     background=listbox_border.cget("background"),
)
vsb = tk.Scrollbar(listbox_border, orient="vertical", command=listbox.yview)
listbox.configure(yscrollcommand=vsb)
vsb.pack(side="right", fill="y")
listbox.pack(padx=10, pady=10, fill="both", expand=True)

for i in range(100):
    listbox.insert("end", "Item #{}".format(i))

root.mainloop()

enter image description here

0 голосов
/ 21 марта 2019

Прежде всего для форматирования символов в списке tkinter вам нужно использовать фиксированный шрифт и функцию .format python ....;

Чтобы вы могли сделать что-то подобное

Нажмите Загрузитьзагрузить данные в список и обратить внимание на код этой строки

s = '{0:> 8} {1: 5}'. формат (i [0], i [1])

self.list.insert (tk.END, s)

import tkinter as tk

RS = (('Apple',10),
      ('Banana',20),
      ('Peack',8),
      ('Lemon',6),)

class App(tk.Frame):

    def __init__(self,):

        super().__init__()

        self.master.title("Hello World")
        self.init_ui()

    def init_ui(self):

        self.pack(fill=tk.BOTH, expand=1,)

        f = tk.Frame()

        sb = tk.Scrollbar(f,orient=tk.VERTICAL)

        self.list = tk.Listbox(f,
                    relief=tk.GROOVE,
                    selectmode=tk.BROWSE,
                    exportselection=0,
                    background = 'white',
                    font='TkFixedFont',
                    yscrollcommand=sb.set,)

        sb.config(command=self.list.yview)

        self.list.pack(side=tk.LEFT,fill=tk.BOTH, expand =1) 
        sb.pack(fill=tk.Y, expand=1)

        w = tk.Frame()

        tk.Button(w, text="Load", command=self.on_callback).pack()
        tk.Button(w, text="Close", command=self.on_close).pack()

        f.pack(side=tk.LEFT, fill=tk.BOTH, expand=0)
        w.pack(side=tk.RIGHT, fill=tk.BOTH, expand=0)


    def on_callback(self,):

        for i in RS:
            s = '{0:>8}{1:5}'.format(i[0],i[1])
            self.list.insert(tk.END, s)


    def on_close(self):
        self.master.destroy()

if __name__ == '__main__':
    app = App()
    app.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...