Python /Tix: заполнить список ComboBox, когда установлен другой ComboBox
Я работаю над проектом для школы, и я просто не могу решить свою проблему:
Приложение, которое я написал, управляет файлом.csv, содержащим информацию о пациентах в больнице, и их дата рождения задается тремя различными комбинированными списками (Y/M/D). Я хочу отобразить правильное количество дней для каждого месяца в комбинированном окне дня (т.е. 31 в январе, 28 или 29 в феврале...).
Итак, это (урезанная версия) мой код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import *
from Tkinter import *
import Tix
#useful variables
today=datetime.date(datetime.today())
listYears = []
for i in range(1900, today.year+1):
listYears.append(i)
listMonths = []
for i in range(1, 13):
listMonths.append(i)
#functions
def dispDay():
birthDay=Tix.ComboBox(frame4, variable=dayVar, selectmode='immediate', listcmd = calculateDay(int(birthYear['value']), int(birthMonth['value'])))
birthDay.entry.config(state='readonly')
birthDay.place(anchor='c',x=(w/8-10), y=445)
for item in listDays :
birthDay.insert(END, item)
def calculateDay (year, month):
if year%400 == 0 :
if month%2 == 0 :
if month == 2 :
days=29
else :
days=30
else:
days=31
elif (year%4 == 0 and year%100!=0):
if month%2 == 0 :
if month == 2 :
days=29
else:
days=30
else:
days=31
else:
if month%2 == 0:
if month == 2 :
days=28
else:
days=30
else:
days=31
global listDays
listDays= []
for i in range(1, days-1):
listDays.append(i)
def quitButton():
qButton=Button(text="Quit",command=window.quit)
qButton.place(relx=0.5, rely=0.5, anchor=CENTER)
def createPatientMenu():
yearVar=IntVar()
monthVar=IntVar()
dayVar=IntVar()
global frame4
frame4=Frame(window,width=w,bg="grey14", height=h)
frame4.pack()
lbYear=Label(frame4, text="Year:")
lbYear.pack()
birthYear=Tix.ComboBox(frame4, variable=yearVar)
birthYear.entry.config(state='readonly')
birthYear.pack()
for item in listYears :
birthYear.insert(END, item)
lbMonth=Label(frame4, text="month:")
lbMonth.pack()
birthMonth=Tix.ComboBox(frame4, variable=monthVar, selectmode='immediate', command=dispDay)
birthMonth.entry.config(state='readonly')
birthMonth.pack()
for item in listMonths :
birthMonth.insert(END, item)
quitButton()
#main
window=Tix.Tk()
w, h = 800, 600
window.geometry("%dx%d+0+0" % (w, h))
window.config(bg='grey14')
window.title("database")
createPatientMenu()
window.mainloop()
Моя проблема в том что int(birthYear['value'])
а также int(birthMonth['value'])
оба возвращают 0 (уже проверили это, добавив печать в начале calculateDays()
), даже если что-то выбрано в месяце и году в комбинированных списках. Я не понимаю почему.
Также python выдает ошибку при выборе месяца:
Исключение в обратном вызове Tkinter (последний вызов последним):
Файл "D:\Python27\lib\lib-tk\Tkinter.py", строка 1541, в__call__
return self.func(*args)
TypeError:dispDay()
не принимает аргументов (1 дано)
Исключение в обратном вызове Tkinter
Traceback (последний вызов был последним):
Файл "D:\Python27\lib\lib-tk\Tkinter.py", строка 1541, в__call__
return self.func(*args)
TypeError:dispDay()
не принимает аргументов (1 дано)
Я что-то пропустил?
Любая помощь будет очень признательна, так как я должен вернуть свое назначение через несколько недель, и у меня еще много работы. Заранее спасибо!