ООП с tkinter GUI: борьба с переменной областью и нарезкой строк - PullRequest
0 голосов
/ 17 ноября 2018

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

1) Пользователь вводит строку <100 символов в текстовое поле </p>

2) Программа выделяет по 5 символов за раз из строки и считает, сколько букв «A» и «B» содержится в подстроке

3) Программа печатает 5-символьную подстроку и № каждой буквы в текстовое поле GUI

Вот что у меня есть:

from tkinter import *
from tkinter.ttk import *

class App(Frame):

    def __init__(self):
        super().__init__()

        # Global variables
        self.input_text = StringVar
        self.output_text = StringVar
        self.letter_A = 0
        self.letter_B = 0
        self.launchGUI()

    def launchGUI(self):
        self.button_selected_string = StringVar()
        self.pack(fill=BOTH, expand=True)

        self.topFrame = Frame(self)
        self.topFrame.grid(row=0)
        self.bottomFrame = Frame(self)
        self.bottomFrame.grid(row=2)

        # Input textbox
        self.input_textbox = Text(self.topFrame, height=5, width=50, borderwidth=2, relief=RIDGE)
        self.input_textbox.grid(row=1)

        # Output textbox
        self.output_textbox = Text(self.bottomFrame, height=5, width=50, borderwidth=2, relief=RIDGE)
        self.output_textbox.grid(row=2)

        # Submit button
        self.submitButton = Button(self.bottomFrame, text="Submit", width=30, command=self.print_result)
        self.submitButton.grid(row=1)

        # Radio button
        self.radioButton1 = Radiobutton(self.bottomFrame, text="Name of Button", variable=self.button_selected_string,
                                        value="BUTTON_SELECTED",
                                        command=self.get_button_state)
        self.radioButton1.grid(row=0)

    # Function for printing result in textbox
    def print_result(self):
        self.iterate() # Calls another method
        self.output_textbox.insert("1.0", str(self.output_text) + str(self.letter_A) + str(self.letter_B))

    # Function that retrieves result of user selection and stores as String
    def get_button_state(self):
        self.button_selected_string.get()

    def iterate(self):
        temp = self.input_textbox.get("1.0", "end-1c")
        if self.get_button_state() == "BUTTON_SELECTED": # Will always be selected for the purpose of example
            i = 100
            while i > 20:
                temp = temp[(i - 5):i]
                self.output_text = self.count_letters(temp)
                i = i - 1
        return self.output_text

    def count_letters(self):

        for y in self.output_text:
            for x in y:
                if x == 'A' or x == 'a':
                    self.letter_A += 1
                elif x == 'B' or x == 'b':
                    self.letter_B += 1
        return self.output_text

def main():
    root = Tk()
    root.geometry("350x300+300+300")
    app = App()
    root.mainloop()


if __name__ == '__main__':
    main()

Проблема (среди многих, я уверен) состоит в том, что когда я пытаюсь распечатать результаты, вместо того, чтобы получить список из 5-символьных длинных подстрок и количества букв «A» и «B», я просто получить:

<class 'tkinter.StringVar'>00

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

Любая помощь будет принята с благодарностью!

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