Я пытаюсь заставить функции виджета Текст работать должным образом в Python Tkinter - PullRequest
0 голосов
/ 20 сентября 2019

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

Я попытался передать литералы в text.get (start index, endindex) и text.insert (index, stringToInsert)

from tkinter import *
import re 

class TextCompiler:

    def __init__(self, master):

        self.a = 1.0

        self.frame = Frame(master)
        self.frame.pack()

        self.topLabel = Label(master, text = "Enter text to be compiled: ", bg = "green", fg = "black")
        self.topLabel.pack(side = TOP)

        self.windowIn = Text(master, state=NORMAL, height=20, width=30)
        self.windowIn.pack(side = LEFT)
        self.windowOut = Text(master, height=20, width=30)
        self.windowOut.pack(side = RIGHT)

        self.printButton = Button(self.frame, text="Compile next line?", command = lambda: self.transferPrint(self.a))
        self.printButton.pack(side = BOTTOM)

        self.quitButton = Button(self.frame, text="Quit", command=lambda: self.quitStuff(master))
        self.quitButton.pack(side = BOTTOM)

    def transferPrint(self, a):
            b = self.a + 0.30
            endOfLine = "{0:.2f}".format(b)
            inputText = self.windowIn.get(self.a, endOfLine)
            self.windowOut.insert(self.a, inputText)
            self.a = self.a + 1.0

    def quitStuff(self, master):
        self.frame.quit()
        master.destroy()

root = Tk()
TextCompiler(root)
root.mainloop()

Мне нужно скопировать одну полную строку и перенести ее во второе текстовое окно за один раз по нажатию кнопки «Скомпилировать следующую строку?»кнопка.До сих пор он записывал одну строку кода, а затем не вставлял ее должным образом.Это вставило бы в конец предыдущей строки.Затем, когда я вставил одну ПОЛНУЮ строку текста и вторую строку текста, она вставлена ​​не полностью.Таким образом, мы должны получить (1.0, 1.30) и вставить (1.0, строка), затем получить (2.0, 2.30), вставить (2.0, строка), получить (3.0, 3.30) вставить (3.0, строка) и так далее ... но его игнорирующий литерализменения параметров и, как уже было сказано, неправильная вставка полных строк текста ...

1 Ответ

0 голосов
/ 20 сентября 2019

Есть две проблемы.Во-первых, индексы не являются числами с плавающей запятой, и вы не должны делать с ними математические вычисления с плавающей запятой.Индексы - это строки вида строка . символ .

Например, в числах с плавающей запятой 1.3 и 1.30 идентичны.В качестве индексов «1.3» представляет третий символ в строке 1, а «1.30» представляет тридцатый символ в строке 1.

Кроме того, вы пренебрегаете копированием новой строки в конце каждой строки.Вы не можете вставить строку 2 в другом окне, если строка 1 не заканчивается новой строкой, вы не можете вставить строку 3, если вторая строка не заканчивается новой строкой и т. Д.

Iне знаю, каково ваше намерение, поэтому трудно рекомендовать решение.Например, действительно ли вы хотите скопировать только первые 30 символов строки, или ваша цель - скопировать всю строку?

Если вам нужны только первые 30 символов строки и скопировать ее вНовая строка в другом окне, вам нужно вставить новую строку при копировании.Например:

self.windowOut.insert("end", inputText+"\n")

Если ваша цель просто скопировать целые строки, вы можете использовать модификатор, чтобы скопировать всю строку плюс завершающий символ новой строки.Или скопируйте только всю строку без новой строки, и, как выше, вы можете добавить новую строку при копировании.

Вот как получить полную строку:

end = "{} lineend".format(self.a)

Вот какполучить полную строку плюс завершающий перевод строки:

end = "{} lineend+1c".format(self.a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...