Как добавить интервал каждый раз, когда я вставляю текст в текстовое поле в tkinter? - PullRequest
0 голосов
/ 03 августа 2020

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

taskList.insert("1.end", siteTaskID)
taskList.insert("1.end",siteTaskTXT)

siteTaskID и siteTaskTXT - это две переменные, содержащие строки в каждой. Строки определяются на основе пользовательского ввода. Например, эта переменная может быть

siteTaskID = "HELLO"
siteTaskTXT = "Store"

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

Это когда я вызываю оба кода с помощью кода выше

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

1 Ответ

0 голосов
/ 03 августа 2020

Просто используйте fstring и поместите столько пробелов, сколько хотите между двумя частями.

taskList.insert("1.end", f'{siteTaskID} {siteTaskTXT}')

edit: По какой-то причине вы отказываетесь публиковать MRE, поэтому, воспринимайте этот выстрел в темноте

from tkinter import Tk, Text, Button 


class App(Tk):
    WIDTH  = 800
    HEIGHT = 600

    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)

        self.textbox = Text(self)
        self.textbox.grid(row=0, column=0, sticky='nswe')

        self.index = 0
        
        #this is the current line you want to affect
        self.cline = 1
        
        #this represents 5 different times you have gathered line data into a list
        #...via a much more dynamic method
        self.vals = [
            ["id1", "text1", "usertext1"],
            ["id2", "text2", "usertext2"],
            ["id3", "text3", "usertext3"],
            ["id4", "text4", "usertext4"],
            ["id5", "text5", "usertext5"],
        ]
        
        #current line data
        self.data = self.vals[self.index]
        
        Button(self, text="click", command=lambda: self.process(self.data)).grid(row=1, column=0)

    #this represents processing a line of gathered data   
    def process(self, data):
        if data: 
            self.textbox.insert(f'{self.cline}.end', f'{" ".join(data)}\n')
        
        #below is only necessary for this example
        #the equivalents should be done somewhere else
        self.cline += 1
        self.index += 1
        self.data = self.vals[self.index] if self.index < len(self.vals) else None


if __name__ == '__main__':
    app = App()
    app.title("My Application")
    app.geometry(f'{App.WIDTH}x{App.HEIGHT}')
    app.mainloop()

в сторону

Судя по вашему комментарию, похоже, вы пытаетесь обмануть качественный метод, например, таблицу заполненный Label или Entry, для более низкого метода форматирования пространства виджета Text в табличное отображение. Если это так, вы можете считать, что ваш текущий метод - пустая трата времени и доставит вам больше головной боли, чем результатов.

...