2014-02-28 55 views
0

基本上我的問題是在用python編寫的tablelist中配置組合框(而不是直接使用tcl)。我已經準備好,可以說明問題的例子,但是,讓之前看到所需的步驟來運行它:在python中使用tablelist wrapper配置組合列表中的組合框的值

  1. 複製從here的tablelist包裝,並將其保存爲「tablelist.py」,然後把它放在示例代碼目錄。
  2. here下載「tklib-0.5」,並從「modules」目錄下複製「tablelist」目錄到示例代碼目錄。

這是代碼:

from tkinter import * 
from tkinter import ttk 
from tablelist import TableList 

class Window (Frame): 
    def __init__(self): 
#  frame 
     Frame.__init__(self) 
     self.grid() 
#  tablelist 
     self.tableList = TableList(self, 
            columns = (0, "Parity"), 
            editstartcommand=self.editStartCmd 
            ) 
     self.tableList.grid() 
#  configure column #0 
     self.tableList.columnconfigure(0, editable="yes", editwindow="ttk::combobox") 
#  insert an item 
     self.tableList.insert(END,('Even')) 

    def editStartCmd(self, table, row, col, text): 
# 
#  must configure "values" option of Combobox here! 
# 
     return 

def main(): 
    Window().mainloop() 

if __name__ == '__main__': 
    main() 

正如你會看到它導致在單個列/細胞窗口的初始值(偶數)。通過單擊單元格將顯示組合框(因爲使用「editstartcommand」)並且它沒有任何值(無)。我知道編輯單元格的小部件時,必須使用「editwinpath」命令來獲取臨時小部件的路徑名,但該方法只是返回指向不可調用的組合框部件的地址字符串。

我會很感激任何幫助或可能的解決方案。

回答

0

我知道我對自己的問題做出迴應有點奇怪,但我希望它對未來的其他人有用。在閱讀了TCL中的tablelist腳本和示例之後,我能夠找到我的答案。答案有兩個不同的部分,一個與包裝器有關(python中的tablelist包裝器,你可以找到它here),另一個駐留在我的示例代碼中。首先,需要修改包裝以在「TableList」類的「配置」方法中包含小部件的路徑名。這是修改的版本:

def configure(self, pathname, cnf={}, **kw): 
    """Queries or modifies the configuration options of the 
    widget. 

    If no option is specified, the command returns a list 
    describing all of the available options for def (see 
    Tk_ConfigureInfo for information on the format of this list). 
    If option is specified with no value, then the command 
    returns a list describing the one named option (this list 
    will be identical to the corresponding sublist of the value 
    returned if no option is specified). If one or more 
    option-value pairs are specified, then the command modifies 
    the given widget option(s) to have the given value(s); in 
    this case the return value is an empty string. option may 
    have any of the values accepted by the tablelist::tablelist 
    command. 
    """ 
    return self.tk.call((pathname, "configure") + 
       self._options(cnf, kw)) 

第二和最後的部分是「editstartcommand」(在我的示例代碼「editStartCmd」方法的情況下)必須在月底返回其「文本」變量義務它。這個技巧可以防止你點擊它們時輸入變成「無」。示例代碼的正確形式爲:

from tkinter import * 
from tkinter import ttk 
from tablelist import TableList 

class Window (Frame): 
    def __init__(self): 
#  frame 
     Frame.__init__(self) 
     self.grid() 
#  tablelist 
     self.tableList = TableList(self, 
            columns = (0, "Parity"), 
            editstartcommand=self.editStartCmd 
            ) 
     self.tableList.grid() 
#  configure column #0 
     self.tableList.columnconfigure(0, editable="yes", editwindow="ttk::combobox") 
#  insert an item 
     self.tableList.insert(END,('Even')) 

    def editStartCmd(self, table, row, col, text): 
# 
#  must configure "values" option of Combobox here! 
# 
     pathname = self.tableList.editwinpath() 
     self.tableList.configure(pathname, values=('Even','Odd')) 
     return text 

def main(): 
    Window().mainloop() 

if __name__ == '__main__': 
    main() 

就是這樣,我希望它足夠清晰。