网上一堆机器翻译的文章,弄了很久才使用grid和pack混合布局的方式搞定这样一个界面。 上代码。 import tkinter as tk from tkinter import filedialog LISTBOX_WIDTH = 80 LISTBOX_HEIGHT = 5 def select_file_names(): selection = filedialog.askopenfilenames( filetypes=[('all files', '*.*'), ('python files', '.py')]) return selection def select_directory(): selection = filedialog.askdirectory() return selection def grid_widget(widget, row, column, padx=5, pady=5, sticky=tk.W): widget.grid(row=row, column=column, padx=padx, pady=pady, sticky=sticky) class Task_scheduler(object): def __init__(self): self.root = tk.Tk() self.root.title('python 模块调度工具') # self.lay_widgets() pass def lay_widgets(self): # labelframe self.labelframe_root = tk.LabelFrame(self.root, text='') self.labelframe_root.grid( row=0, column=0, padx=5, pady=5, sticky='WENS') # self.labelframe_button = tk.LabelFrame(self.labelframe_root, text='操作') self.labelframe_button.grid( row=1, column=0, padx=5, pady=5, sticky='WENS') # self.labelframe_listbox = tk.LabelFrame( self.labelframe_root, text='文件列表') self.labelframe_listbox.grid( row=2, column=0, padx=5, pady=5, sticky='WENS') # button def add_files(): files = select_file_names() for file in files: self.listbox_files.insert(tk.END, file) pass def del_selection(): selection = self.listbox_files.curselection() for index in selection[::-1]: print(index) self.listbox_files.delete(index) pass button_add = tk.Button(self.labelframe_button, text='添加文件', command=add_files) grid_widget(button_add, 0, 0) button_del = tk.Button(self.labelframe_button, text='删除选中', command=del_selection) grid_widget(button_del, 0, 1, sticky='E') # listbox self.listbox_files = tk.Listbox(self.labelframe_listbox, width=LISTBOX_WIDTH, height=LISTBOX_HEIGHT, # xscrollcommand=self.scx.set, yscrollcommand=self.scy.set, selectmode=tk.EXTENDED) # self.scy = tk.Scrollbar(self.labelframe_listbox) # self.scx = tk.Scrollbar(self.labelframe_listbox, orient=tk.HORIZONTAL) # self.scx.pack(side=tk.BOTTOM, fill=tk.X) self.scy.pack(side=tk.RIGHT, fill=tk.Y) self.listbox_files.pack(anchor='w', expand='no', fill=tk.BOTH) # self.scx.config(command=self.listbox_files.xview) self.scy.config(command=self.listbox_files.yview) # self.listbox_files.config(xscrollcommand=self.scx.set, yscrollcommand=self.scy.set) def start(self): self.root.mainloop() pass if __name__ == '__main__': ins = Task_scheduler() ins.start()
tkinter ListBox 添加滚动条以及元素操作实例
最新推荐文章于 2023-08-19 14:57:54 发布