python - 如何将条目的值从一个类传递到另一个类?
问题描述
目标/目标:
我的目标是将一个条目小部件从一个类Window1
传递到另一个类Window2
?
代码:
这是我当前的代码:
from tkinter import *
import tkinter.ttk as ttk
def main():
root = Tk()
app = Window1(root)
root.mainloop()
class Window1:
def __init__(self,master):
self.master = master
self.master.geometry('400x150')
self.frame = Frame(self.master)
self.frame.pack(fill="both", expand=True)
self.label_username = Label(self.frame, text="Username: ",font=("bold",16))
self.entry_username = Entry(self.frame, font = ("bold", 14))#pass this into Window 2 as label
self.label_username.pack()
self.entry_username.pack()
self.logbtn = Button(self.frame, text="Login", font = ("bold", 10), command=self._login_btn_clicked)
self.logbtn.pack()
def _login_btn_clicked(self):
# print("Clicked")
username = self.entry_username.get()
if username == 'test':
self.master.withdraw()
self.newWindow = Toplevel(self.master)
self.app = Window2(self.newWindow)
else:
self.entry_username.delete(0,"end")
class Window2:
def __init__(self,master):
notebook = ttk.Notebook(master)
notebook.pack(expand = 1, fill = "both")
#Frames
main = ttk.Frame(notebook)
notebook.add(main, text='Main-Screen')
self.output = Label(main, text = )#OUTPUT HERE
self.output.pack()
if __name__ == '__main__':
main()
我试过的:
在这里,在 Window2 代码处:
self.output = Label(main, text = )#OUTPUT HERE
self.output.pack()
文本当前为空,但我试图从小Window1
部件名称返回值:self.entry_username
但不知道该怎么做。
这是我尝试过的:
self.output = Label(main, text = Window1().entry_username.get())#OUTPUTHERE
self.output.pack()
错误:
但这是错误:
self.output = Label(main, text = Window1().entry_username.get())#OUTPUT HERE
TypeError: __init__() missing 1 required positional argument: 'master'
解决方案
这实际上与 tkinter 无关,无论是普通的 python 还是 tkinter 或其他任何东西,您都使用相同的技术。要访问对象的属性,您需要拥有对该对象的引用。
例如,如果您想Window2
访问 中的数据Window1
,可以将 的实例传递Window1
给Window2
:
def _login_btn_clicked(self):
...
self.newWindow = Toplevel(self.master)
self.app = Window2(self.newWindow, window1=self)
...
class Window2:
def __init__(self,master, window1):
self.window1=window1
...
username = self.window1.entry_username.get()
self.output = Label(main, text=username)
推荐阅读
- jquery - Show message only in safari browser
- amazon-web-services - AWS OpenApi 2.0 使用 Mturk 403 错误
- ios - 使用 Objective-C 中的 Swift ObservableObject 时出现链接器错误
- string - Replace String in variable using bash
- amazon-web-services - Cognito - Refresh token has been revoked
- java - 从方法类访问变量以在 GUI 类中使用
- firebase - Firebase Emulator logs are poorly formatted
- powershell - PS 5.1 Workflow MaxSessionsPerWorkflow
- r - 在 r 中具有排序逻辑的操作向量
- windows - Windows - OneDrive 同步文件夹中的上下文菜单