Python 来自子窗口的数据
在导入的代码中,使用用户选择的日期正确设置变量“values” 在日历退出时调用def选择 我卡住了。我不知道如何捕捉它并在我的主代码中使用它 非常感谢Python 来自子窗口的数据,python,tkinter,calendar,Python,Tkinter,Calendar,在导入的代码中,使用用户选择的日期正确设置变量“values” 在日历退出时调用def选择 我卡住了。我不知道如何捕捉它并在我的主代码中使用它 非常感谢 # MAIN CODE (simplified) from tkinter import * import calendarWidget def manageCalendarWindow(): root4 = Tk() data = {} app = calendarWidget.Calendar(root4,
# MAIN CODE (simplified)
from tkinter import *
import calendarWidget
def manageCalendarWindow():
root4 = Tk()
data = {}
app = calendarWidget.Calendar(root4, data)
root4.mainloop()
manageCalendarWindow()
#how to get the date?
-.-.-.-.-.-.-
# CALENDAR WIDGET (simplified)
class Calendar:
def setup(self, y, m)
(...)
for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2):
for d, day in enumerate(week):
if day:
b = tk.Button(self.parent, width=1, text=day, relief = 'flat',\
command=lambda day=day:self.selection(day, calendar.day_name[(day-1) % 7]))
self.wid.append(b)
b.grid(row=w, column=d)
def selection(self, day, name):
self.day_selected = day
self.month_selected = self.month
self.year_selected = self.year
self.day_name = name
#data
self.values['day_selected'] = day
self.values['month_selected'] = self.month
self.values['year_selected'] = self.year
self.values['day_name'] = name
self.values['month_name'] = calendar.month_name[self.month_selected]
self.setup(self.year, self.month)
print(self.values) # <--- here the value is correct
self.parent.destroy()
这不是:
当函数退出时,函数manageCalendarWindow()本地的所有内容都会被垃圾收集。这包括应用程序(类实例)。你必须归还它才能让它活着。还要注意的是,您发布的代码中没有self.month,但我认为这是因为减少了此帖子的代码量
def manageCalendarWindow():
root4 = Tk()
data = {}
app = calendarWidget.Calendar(root4, data)
root4.mainloop()
return app
## or
## return app.day_name
app=manageCalendarWindow()
print(app.day_name)
## or
##day_name=manageCalendarWindow()
##print(day_name)
当函数退出时,函数manageCalendarWindow()本地的所有内容都会被垃圾收集。这包括应用程序(类实例)。你必须归还它才能让它活着。还要注意的是,您发布的代码中没有self.month,但我认为这是因为减少了此帖子的代码量
def manageCalendarWindow():
root4 = Tk()
data = {}
app = calendarWidget.Calendar(root4, data)
root4.mainloop()
return app
## or
## return app.day_name
app=manageCalendarWindow()
print(app.day_name)
## or
##day_name=manageCalendarWindow()
##print(day_name)
一个简单的概念证明程序,从类内实例化的类中获取变量
class SubClass():
def __init__(self):
self.variable="SubClass variable"
class MainClass():
def __init__(self):
app=self.instantiate_class()
print(app.variable) ## prints the string
def instantiate_class(self):
app=SubClass()
print("app =", app) ## not empty
return app
MainClass()
一个简单的概念证明程序,从类内实例化的类中获取变量
class SubClass():
def __init__(self):
self.variable="SubClass variable"
class MainClass():
def __init__(self):
app=self.instantiate_class()
print(app.variable) ## prints the string
def instantiate_class(self):
app=SubClass()
print("app =", app) ## not empty
return app
MainClass()
正如我在评论中提到的,代码中只能有一个mainloop。其他的将被忽略。因此,不可能使用它来等待子窗口的响应 我使用的解决方案是
app = myCalendar.Calendar(personal_path, root4, gui_language)
root4.wait_window(app.parent)
return app
代码打开窗口并使用等待窗口()等待结果
谢谢大家。
再见。正如我在评论中提到的,代码中只能有一个mainloop。其他的将被忽略。因此,不可能使用它来等待子窗口的响应 我使用的解决方案是
app = myCalendar.Calendar(personal_path, root4, gui_language)
root4.wait_window(app.parent)
return app
代码打开窗口并使用等待窗口()等待结果
谢谢大家。
再见。您关于“在日历退出时调用def选择方法”的评论听起来很关键。您能否包括调用“selection”的上下文?听起来这就是问题所在。我插入了调用选择的按钮的代码。谢谢,罗恩。:)您关于“在日历退出时调用def选择方法”的评论听起来很关键。您能否包括调用“selection”的上下文?听起来这就是问题所在。我插入了调用选择的按钮的代码。谢谢,罗恩。:)完美的你给我的建议是完美的。但如果我把它嵌套在另一个类中,它就会停止。我已经在其他人的后面添加了代码。打印(“而且……这永远不会被打印!”)在您退出Tkinter之前,不会打印任何内容。并检查您在self.year_selected中是否确实有一个值,即在课堂日历中创建/更新消息的时间/地点打印消息,以及它的值。我知道,Curly。我知道。。。但真的,我不知道如何得到这个约会。。。为什么,如果我在类中调用日历,变量app是空的。完美。你给我的建议是完美的。但如果我把它嵌套在另一个类中,它就会停止。我已经在其他人的后面添加了代码。打印(“而且……这永远不会被打印!”)在您退出Tkinter之前,不会打印任何内容。并检查您在self.year_selected中是否确实有一个值,即在课堂日历中创建/更新消息的时间/地点打印消息,以及它的值。我知道,Curly。我知道。。。但真的,我不知道如何得到这个约会。。。为什么,如果我在类中调用日历,变量app是空的。我想我已经发现了问题所在。从另一个窗口调用该窗口,从另一个窗口调用此窗口:主窗口>新记录窗口>日历窗口。因此,我了解到,在一个程序中,只有一个mainloop()可以工作,其他的将被忽略。只有一个链接到主窗口。没有其他人。程序不会等待结果并继续运行。它打开日历窗口,无法等待结果。或者,更好的是,我不知道如何暂停代码等待用户选择。我不知道该怎么办。非常感谢你的帮助。:)嗨,乔。我想我已经发现了问题所在。从另一个窗口调用该窗口,从另一个窗口调用此窗口:主窗口>新记录窗口>日历窗口。因此,我了解到,在一个程序中,只有一个mainloop()可以工作,其他的将被忽略。只有一个链接到主窗口。没有其他人。程序不会等待结果并继续运行。它打开日历窗口,无法等待结果。或者,更好的是,我不知道如何暂停代码等待用户选择。我不知道该怎么办。非常感谢你的帮助。:)说对
mainloop
的其他调用被忽略是错误的。它们绝对不会被忽略。说对mainloop
的其他调用被忽略是错误的。他们绝对不会被忽视。