2015-09-01 44 views
1

我有一個Python3應用程序,它使用tkinter接口來收集存儲在MySQL數據庫中的編輯信息&。數據由幾個表組成,每個錶行由一個由多個StringVar()組成的類(這裏稱爲「Action」)表示,有時用按鈕顯示以刪除或插入新行。類成員存儲在類變量'_registry'中進行各種操作。Python3&Tkinter,list.sort由StringVar構成的對象列表

在創建新行(在應用程序中,而不是數據庫)後,用戶可以輸入超出自然順序的數據,所以我想根據StringVar('date' )再次顯示之前。儘管數據庫可以輕鬆處理這個問題,並且很可能有其他簡單的方法來完成它,但似乎list.sort應該能夠做到,但我無法弄清楚如何讓密鑰工作。

這裏的init類的沒有其他功能

class Action: 
    _registry=[] 
    def __init__(self, date, quantity, temp, pressure, notes): 
     self.date=StringVar() 
     self.quantity=StringVar() 
     self.temp=StringVar() 
     self.pressure=StringVar() 
     self.notes=StringVar() 
     self.date.set(date) 
     self.quantity.set(quantity) 
     self.temp.set(temp) 
     self.pressure.set(pressure) 
     self.notes.set(notes) 
     Action._registry.append(self) 

這裏是一個不太難達到我想要排序的數據的方法:

>>> Action._registry[1].__dict__['date'].get() 
'2015-08-25' 

這裏是我的一些失敗嘗試讓list.sort使用'date'StringVar的內容。

>>> list.sort(Action._registry, key=lambda __dict__['date'].get()) 
    File "<stdin>", line 1 
    list.sort(Action._registry, key=lambda __dict__['date'].get()) 
                ^
SyntaxError: invalid syntax 

>>> list.sort(Action._registry, key=attrgetter('date')) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: StringVar() < StringVar() 

>>> list.sort(Action._registry, key=itemgetter('date')) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'Action' object is not subscriptable 

>>> list.sort(Action._registry, key=attrgetter(Action._registry.__dict__['date'].get())) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'list' object has no attribute '__dict__' 

好像list.sort將隱含應用的關鍵功能_registry,但我無法找到所要求的「獲得()」的作品語法。

回答

1

你沒有完全明白lambda的語法。你需要一個參數和一個冒號。嘗試:

list.sort(Action._registry, key=lambda item: item.__dict__['date'].get()) 

其他風格提示:這是慣用的調用sort爲你排序,而不是從字面上做list.sort對象的方法。

Action._registry.sort(key=lambda item: item.__dict__['date'].get()) 
+0

完美,謝謝! – Pepi

相關問題