2014-11-15 46 views
0

我有一個文件叫wckcalendar.py。我想導入這個日曆,到另一個tkinter qw.py它有一個按鈕。我想同時顯示從wckcalendar文件的按鈕和日曆Tkinter的。從另一個文件導入編碼到一個新的tkinter

,但我得到的錯誤是:

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 
>>> 

問題:我沒有得到顯示在同一window.Please幫助我的按鈕和日曆! 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() 
+0

什麼是'勝利(父母,d)'應該在做什麼? –

+0

@PadraicCunningham它會調用日曆! –

+0

但你沒有使用任何功能 –

回答

1

你的最後一句話root.mainloop()不正確縮進,並會在模塊進口的上下文中運行,這是不是你想要

我什麼在代碼中看到一些其他問題,如函數保持對象的局部變量:在函數返回後它們將被垃圾收集

相關問題