tkinter ListBox 添加滚动条以及元素操作实例

网上一堆机器翻译的文章,弄了很久才使用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()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值