Python将默认值传递给combobox类:所有实例都显示相同的值

时间:2016-01-02 21:58:20

标签: python combobox tkinter

我正在编写一个程序,用于分析包含我的信用卡月结单的CSV文件。我正在尝试使用tkinter创建一个gui,其中我有一行标签标题,后面是由3个标签组成的行,然后是第4列中有多个类别的组合框。我写了一个定义表的每一行的类。我想将值传递给类的实例,该实例指定组合框的初始值。每个实例或行都有所不同。或者至少应该...... [/ p>

我的问题是,在为每个行/实例传递不同的数字时,我总是得到具有为第一个创建的实例指定的值的所有行。 我的课程如下:

class CatFormApp:

def __init__(self,parent):
    self.parent = parent        
    self.datelabel = Tkinter.Label(root, text='Date',font  ='Verdana 12 bold',borderwidth=5).grid(row=0,column=0)        
    self.transactionlabel = Tkinter.Label(root, text='Transactions',font  ='Verdana 12 bold',borderwidth=5).grid(row=0,column=1)
    self.paidoutlabel = Tkinter.Label(root, text='Paid Out',font  ='Verdana 12 bold',borderwidth=5).grid(row=0,column=2)
    self.catlabel = Tkinter.Label(root, text='Category',font  ='Verdana 12 bold',borderwidth=5).grid(row=0,column=3)        



class RowFormat:
    def __init__(self,parent,rownumbval,defaultval,dateval,transactionval,paidoutval,CatTupleVals,bkg):
        self.parent = parent
        self.datevallabel = Tkinter.Label(root, text=dateval, borderwidth=5).grid(row=rownumbval,column=0)
        self.transactionvallabel = Tkinter.Label(root, text=transactionval, borderwidth=5, background = bkg).grid(row=rownumbval,column=1)        
        self.paidoutvallabel = Tkinter.Label(root, text=paidoutval, borderwidth=5).grid(row=rownumbval,column=2)        
        self.combo(rownumbval,defaultval,CatTupleVals) 

    def combo(self,rownumb,default,CatTuple):
        self.box_value = '1'
        self.box = ttk.Combobox(self.parent,textvariable = self.box_value)
        self.box['values']=CatTuple
        self.box.current(default)
        self.box.grid(row=rownumb,column=3)

我的主要代码的相关位是:

root = Tkinter.Tk()


app = CatFormApp(root)
row = ['']*(len(CreditData['Transactions'])+1)
for r in range(1,len(CreditData['Transactions'])):
    if CreditData['Paid out'][r-1] != '':
        if noMatch[r-1] == True: 
            print 1
            row[r] = RowFormat(root,r,1,CreditData['Date'][r-1],CreditData['Transactions'][r-1],CreditData['Paid out'][r-1][1:],tuple(CatHeadings[:-1]),bkg = 'red')
        else:
            print 2
            row[r] = RowFormat(root,r,2,CreditData['Date'][r-1],CreditData['Transactions'][r-1],CreditData['Paid out'][r-1][1:],tuple(CatHeadings[:-1]),bkg = 'white smoke')

root.mainloop()

在上面的示例中,所有组合框都具有与1相关联的值。而我应该得到一些带有1而一些带有2取决于if语句。我感到困惑,因为我做了一些与传递的其他标签值非常相似的东西,这些都是按照预期的方式出现的。

如果有人可以解释我出错的地方,我真的很感激

2 个答案:

答案 0 :(得分:0)

此代码错误:

application/x-www-form-urlencoded

httppost.setHeader("Content-Type", "application/json"); 属性的值必须是tkinter类self.box_value = '1' self.box = ttk.Combobox(...,textvariable = self.box_value) 的实例(或其他特殊tkinter变量之一)。

答案 1 :(得分:0)

像这样使用:

self.box_value = Tkinter.StringVar()
self.box = ttk.Combobox(self.parent,textvariable = self.box_value)

要设置值,请使用:

self.box['values'] = ('A', 'B', 'C')

要选择第一项,请使用:

self.box.current(0)