StringVar (). Set () не корректирует StringVar - PullRequest
0 голосов
/ 18 июня 2019

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

Однако,Я сталкиваюсь с проблемой, когда StringVar, который я использую в качестве вывода, не обновляется командой .set ().

    def __init__(self):
        self.window = Tk()
        self.window.title("Terminal Writer 9000!")
        self.terminalString = StringVar()
        self.terminalString.set("This is an example message.")
        self.allcontent = ttk.Frame(self.window)
        self.allcontent.grid(row=0, column=0, sticky="nwse")
        self.mainframe = ttk.Frame(self.allcontent)
        self.mainframe.grid(row=0, column=0, sticky = "nwse", columnspan=4, rowspan=5)
        self.terminal = ttk.Label(self.mainframe, textvariable=self.terminalString, padding=10, relief="sunken") 
        self.terminal.grid(row=0, column=0, rowspan=5, columnspan=2, sticky="nwse")
        # GUI setup for Buttons and Entry box omitted...

play = TerminalWriterApp()
play.window.mainloop()

Однако область, используемая меткой терминала,пусто, хотя должно отображаться «Это пример сообщения».Во время устранения неполадок я сделал это, что, по сути, является полной копией / вставкой функциональных элементов моего исходного кода:

from tkinter import *
from tkinter import ttk

window = Tk()

strvar = StringVar()
strvar.set("Test 2")

allcontent = ttk.Frame(window)
allcontent.grid(row=0, column=0, sticky="nwse")

mainframe = ttk.Frame(allcontent)
mainframe.grid(row=0, column=0, sticky="nwse", columnspan=4, rowspan=5)

text = Label(mainframe, text="Test 1")
text.grid(row=0, column=0, sticky="nwse")

text2 = Label(mainframe, textvariable=strvar)
text2.grid(row=1, column=0, sticky="nwse")

window.mainloop()

Этот код работает по назначению, отображая окно с «Тест 1» и «Тест»2 "в отдельных строках.

Кто-нибудь знает, почему метод set () не будет работать в этом контексте?(Кроме того, не стесняйтесь злиться на мой ужасный код - мне нужно как-то выучить хорошие привычки!)

1 Ответ

0 голосов
/ 18 июня 2019

По некоторым причинам метка появляется, когда приложение фокусируется (когда вы нажимаете на нее); возможно это из-за стека вложенных фреймов, IDK.

Вы можете использовать focus_force, чтобы ограничить операционную систему, чтобы сразу сосредоточиться на вашем приложении.

from tkinter import *
from tkinter import ttk


class TerminalWriterApp:
    def __init__(self):
        self.window = Tk()
        self.window.title("Terminal Writer 9000!")

        self.terminalString = StringVar()
        self.terminalString.set("This is an example message.")

        self.allcontent = ttk.Frame(self.window)
        self.allcontent.grid(row=0, column=0, sticky="nwse")

        self.mainframe = ttk.Frame(self.allcontent)
        self.mainframe.grid(row=0, column=0, sticky = "nwse", columnspan=4, rowspan=5)

        self.terminal = ttk.Label(self.mainframe, textvariable=self.terminalString, padding=10, relief="sunken") 
        self.terminal.grid(row=0, column=0, rowspan=5, columnspan=2, sticky="nwse")

        self.terminal.focus_force()

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