3

我有一个字符串“currentMessage”和一个标签来显示它。我有一个 Toplevel 小部件,其中包含一个 Text 小部件,可为“currentMessage”提供新值:

from tkinter import *
from tkinter import ttk

root = Tk()
mainFrame = ttk.Frame(root)
mainFrame.grid()
currentMessage = 'current Message'
ttk.Label(mainFrame, text = currentMessage).grid(padx = 10, pady = 10)

def updateCurrentMessage(popupWindow):
    currentMessage = popupWindow.textBox.get(0.0, END)

def changeValues():
    popup = Toplevel(mainFrame)
    popup.grid()
    textBox = Text(popup, width = 20, height = 5)
    textBox.grid(column = 0, row = 0)
    textBox.insert(END, 'new message here')
    b = ttk.Button(popup, command = lambda: updateCurrentMessage(popup))
    b.grid(column = 0, row = 1, padx = 5, pady = 5)
    b['text'] = 'Update'

theButton = ttk.Button(mainFrame, command = changeValues, text = 'Click')
theButton.grid(padx = 10, pady = 10)

mainFrame.mainloop()

我尝试使用此函数获取顶层的“textBox”文本小部件的内容:

def updateCurrentMessage(popupWindow):
    currentMessage = popupWindow.textBox.get(0.0, END)

但我有一个错误

'Toplevel' 对象没有属性 'textBox'

那么我如何访问小部件'textBox'的内容,它是'popup'的子小部件(这个Toplevel小部件仅在调用函数changeValues()时创建)?

4

2 回答 2

2

我想这可能就是您要寻找的东西-尽管我只是在猜测,因为您正在为您认为自己遇到的特定问题寻求解决方案,但是如果我是您,我会重新考虑我到底想做什么:

from tkinter import *
from tkinter import ttk

# Create Tk Interface root
root = Tk()

# Initialize mainFrame
mainFrame = ttk.Frame( root )
mainFrame.grid()

# Initialize label of mainframe
theLabel = ttk.Label( mainFrame, text='Current Message' )
theLabel.grid( padx=10, pady=10 )

def createPopup():
    # Initialize popup window
    popup = Toplevel( mainFrame )
    popup.grid()
    # Initialize text box of popup window
    textBox = Text( popup, width=20, height=5 )
    textBox.grid( column = 0, row = 0 )
    textBox.insert( END, 'New Message Here' )
    # Initialize button of popup window
    button = ttk.Button( master  = popup,
                         command = lambda: theLabel.config(text=textBox.get(0.0, END)),
                         text = 'Update')
    button.grid( column=0, row=1, padx=5, pady=5 )

# Initialize button of main frame
theButton = ttk.Button( mainFrame, command=createPopup, text='Click' )
theButton.grid( padx=10, pady=10 )

# Enter event loop
mainFrame.mainloop()
于 2013-11-08T06:41:50.093 回答
-1

确实有一种方法,像这样:

def updateCurrentMessage(popupWindow):
    currentMessage = popupWindow.nametowidget('textBox').get(0.0, END)

def changeValues():
    popup = Toplevel(mainFrame)
    popup.grid()
    textBox = Text(popup, width = 20, height = 5, name = 'textBox')
    textBox.grid(column = 0, row = 0)
    textBox.insert(END, 'new message here')
    b = ttk.Button(popup, command = lambda: updateCurrentMessage(popup))
    b.grid(column = 0, row = 1, padx = 5, pady = 5)
    b['text'] = 'Update'

您可以选择任何您想要的“名称”。

于 2018-12-16T03:46:15.560 回答