Я только начинаю изучать 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
Похоже, у меня ошибка типа и, возможно, я ошибаюсь с областью действия моих переменных, но я не уверен, что делать дальше ...
Любая помощь будет принята с благодарностью!