如何确定动态创建时选择的检查按钮?

时间:2016-01-28 22:58:03

标签: python tkinter

我正在tkinter中创建一个自定义文件选择器。我正在创建一个表示目录中文件的检查按钮网格。现在,我想做的就是获取用户选择的文件名列表。到目前为止,我的代码很好地显示了gui,但是当我尝试确定用户检查了哪些框时它不起作用。我不确定我做错了什么。最有可能的方式是我为checkbutton设置变量。我知道这对于python pro来说很容易,但我不是专业人士所以任何帮助都会非常感激。请参阅下面的代码。对于大量的代码提前道歉,但我不知道我哪里出错了所以我把它全部放进去了。

标记

class scareGUI:

def __init__(self, master):

    self.selectedFileName = StringVar()

    #filter non video file types
    includes = ['*.mp4','*.py']
    includes = r'|'.join([fnmatch.translate(x) for x in includes])

    #master.attributes('-zoomed', True)

    self.frame_header = ttk.Frame(master)
    self.frame_header.pack()
    ttk.Label(self.frame_header, text="TerrorForm ScareBox").grid(row=0, column = 0, rowspan = 2)

    self.frame_files = ttk.Frame(master)
    self.frame_files.pack()

    self.frame_footer = ttk.Frame(master)
    self.frame_footer.pack()


    #pull file names from file system
    for root, dirs, self.files in os.walk('./movies'):

        self.files = [os.path.join(root, f) for f in self.files]
        self.files = [f for f in self.files if re.match(includes, f)]

    #Determine number of rows in grid
    numfiles = len(self.files)

    dividesBy = False
    numRows = IntVar()
    numColumns = 4
    while (dividesBy == False):
        if(numfiles % numColumns == 0):
            numRows=int(numfiles/numColumns)
            dividesBy = True
        else:
            numfiles+=1

    #Print Check Boxes in Grid layout
    filmIcon = PhotoImage(file='tf_film_icon.gif')
    i=0
    self.checkedFiles=[None]*len(self.files)

    for r in range(numRows):
        for c in range(4):
            if (i<len(self.files)):
               self.checkedFiles[i] = IntVar()
               checkbutton = ttk.Checkbutton(self.frame_files, text=self.files[i], variable=self.checkedFiles[i])
               checkbutton.config(image = filmIcon,compound = TOP)
               checkbutton.image = filmIcon
               checkbutton.grid(row = r, column = c)
               i += 1

    def getChosenFiles(self):
        self.chosenFiles=[]
        for x in range(len(self.files)):
            if(self.checkedFiles[x].get()):
                self.chosenFiles.append(self.files[x])
        print (self.chosenFiles[0])
        return self.chosenFiles

def main():
   root = Tk()
  scaregui = scareGUI(root)
  root.mainloop()

if __name__ == "__main__": main()

0 个答案:

没有答案