【发布时间】:2014-11-15 12:01:05
【问题描述】:
我有一个名为 wckcalendar.py 的文件。我想将此日历导入另一个具有按钮的 tkinter qw.py。我想在同一个 tkinter 上显示来自 wckcalendar 文件的按钮和日历。
但我得到错误:
File "C:/Python27/qw.py", line 1, in <module>
import wckCalendar
File "C:/Python27\wckCalendar.py", line 115, in <module>
root.mainloop()
NameError: name 'root' is not defined
>>>
问题:我没有在同一个窗口中显示我的按钮和日历。请帮助! qw.py
import wckCalendar
from wckCalendar import *
import Tkinter
class myproject(Tkinter.Tk):
def __init__(self,parent, master):
Tkinter.Tk.__init__(self)
self.button2()
self.calendar()
win(root, data)
def button2(self):
button2 = Tkinter.Button(self, text = "Ram")
button2.grid(column=1,row=3)
def win(parent, d):
win = tk.Toplevel(parent)
cal = Calendar(win, d)
app = myproject(None, None)
app.mainloop()
wckCalendar.py
import calendar
import Tkinter as tk
import datetime
class Data:
def __init__(self):
self.day_selected = 0
self.month_selected = 0
self.year_selected = 0
self.day_name = 0
class Calendar(tk.Frame):
def __init__(self, master, data, **config):
tk.Frame.__init__(self, master, cnf=config)
self.data = data
self.parent = parent
self.cal = calendar.TextCalendar(calendar.SUNDAY)
self.year = 2014
self.month = 11
self.wid = []
self.day_selected = 1
self.month_selected = self.month
self.year_selected = self.year
self.day_name = ''
self.setup(self.year, self.month)
def clear(self):
for w in self.wid[:]:
w.grid_forget()
#w.destroy()
self.wid.remove(w)
def go_prev(self):
if self.month > 1:
self.month -= 1
else:
self.month = 12
self.year -= 1
#self.selected = (self.month, self.year)
self.clear()
self.setup(self.year, self.month)
def go_next(self):
if self.month < 12:
self.month += 1
else:
self.month = 1
self.year += 1
#self.selected = (self.month, self.year)
self.clear()
self.setup(self.year, self.month)
def selection(self, day, name):
self.day_selected = day
self.month_selected = self.month
self.year_selected = self.year
self.day_name = name
self.data.day_selected = day
self.data.month_selected = self.month
self.data.year_selected = self.year
self.data.day_name = name
#self.selected = day
self.clear()
self.setup(self.year, self.month)
def setup(self, y, m):
left = tk.Button(self.parent, text='<', command=self.go_prev)
self.wid.append(left)
left.grid(row=0, column=1)
header = tk.Label(self.parent, height=2, text='{} {}'.format(calendar.month_abbr[m], str(y)))
self.wid.append(header)
header.grid(row=0, column=2, columnspan=3)
right = tk.Button(self.parent, text='>', command=self.go_next)
self.wid.append(right)
right.grid(row=0, column=5)
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for num, name in enumerate(days):
t = tk.Label(self.parent, text=name[:3])
self.wid.append(t)
t.grid(row=1, column=num)
for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2):
for d, day in enumerate(week):
if day:
#print(calendar.day_name[day])
b = tk.Button(self.parent, width=1, text=day, command=lambda day=day:self.selection(day, calendar.day_name[(day-1) % 7]))
self.wid.append(b)
b.grid(row=w, column=d)
sel = tk.Label(self.parent, height=2, text='{} {} {} {}'.format(
self.day_name, calendar.month_name[self.month_selected], self.day_selected, self.year_selected))
self.wid.append(sel)
sel.grid(row=8, column=0, columnspan=7)
ok = tk.Button(self.parent, width=5, text='OK', command='disabled')
self.wid.append(ok)
ok.grid(row=9, column=2, columnspan=3, pady=10)
if __name__ == "__main__":
# all the stuff not needed when importing Calendar into another module>
def win(parent, d):
win = tk.Toplevel(parent)
cal = Calendar(win, d)
data = Data()
root = tk.Tk()
win(root, data)
root.mainloop()
【问题讨论】:
-
win(parent, d)应该做什么? -
@PadraicCunningham 它会调用日历!
-
但是您没有在任何地方使用该功能
-
@PadraicCunningham 我正在使用第一个代码中的函数!
-
在你的第一个代码中你使用 root 但从不定义它