Python / Tix:在设置另一个ComboBox时填充一个ComboBox列表

时间:2018-03-29 12:47:31

标签: python python-2.7 tkinter combobox tix

我正在为一所学校的项目工作,我似乎无法解决我的问题:

我写的应用程序管理一个.csv文件,其中包含有关医院患者的信息,他们的出生日期由三个不同的组合框(Y / M / D)设置。我希望在当天显示每个月的正确天数 - ComboBox(即1月31日,2月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回调中的例外情况
  追溯(最近的呼叫最后):
  文件" D:\ Python27 \ lib \ lib-tk \ Tkinter.py",第1541行,__call__   return self.func(*args)
  TypeError:dispDay()不带参数(给定1个)

我错过了什么吗?

任何帮助都会非常感激,因为我必须在几周内回馈我的同意,并且还有很多工作要做。提前谢谢!

0 个答案:

没有答案