繁体   English   中英

Python Tkinter 列表框后退前进按钮

[英]Python Tkinter Listbox Back Forward Button

我有一个列表框,并用它打印了一些内容。 我想放一个来回按钮,当我按下按钮时,它会在索引中来回移动,并且该选择出现在列表框中。 例如,在照片中选择了 0 索引。 当我按下 Forth 时,我希望它达到 1 个索引。 为此,我研究并分析了示例代码,但没想到我找不到结果。

在此处输入图像描述

import tkinter as tk

from tkinter import *

root = tk.Tk()

my_frame = Frame(root)

my_scrollbar = Scrollbar(my_frame, orient=VERTICAL) 

list = Listbox(my_frame, width=85, height=20, yscrollcommand=my_scrollbar.set)

for i in range(50):
    list.insert(END, str(i)+".index")

my_scrollbar.config(command=list.yview)
my_scrollbar.pack(side=RIGHT, fill=Y)

my_frame.pack()
list.pack()

因此,如果我理解正确,您需要 2 个按钮,可以让您在索引中前后循环。

因此,下面是您修改的代码,允许您使用 GUI 明显地循环浏览列表框。

(以下说明)

import tkinter as tk
from tkinter import *

root = tk.Tk()

my_frame = Frame(root)
my_frame.pack()

my_scrollbar = Scrollbar(my_frame)
my_scrollbar.pack(side=RIGHT, fill=Y)

listBox_0 = tk.Listbox(my_frame, width=85, height=20, yscrollcommand=my_scrollbar.set, selectmode='single')
listBox_0.pack()

my_scrollbar.config(command=listBox_0.yview)


def backButtonFN(my_frame):
    curselection = listBox_0.curselection()
    indexLB = curselection[0]
    indexLB = indexLB - 1
    if indexLB > 0 or indexLB == 0:
        listBox_0.selection_clear(0, last='end')
        listBox_0.selection_set(indexLB)
    else:
        None
pass

def forwardButtonFN(my_frame):
    curselection = listBox_0.curselection() #current selection method
    indexLB = curselection[0] #get value of index
    indexLB = indexLB + 1 #add 1 to current value
    listBox_0.selection_clear(0, last='end') #delete old selection
    listBox_0.selection_set(indexLB) #select new index
pass

backButton = tk.Button(my_frame) 
backButton.configure(text='BACK')
backButton.pack(anchor='s', side='left')
backButton.bind('<1>', backButtonFN, add='' )


forwardButton = tk.Button(my_frame) 
forwardButton.configure(text='FOWARD')
forwardButton.pack(anchor='s', side='right')
forwardButton.bind('<1>', forwardButtonFN, add='' )

for i in range(50):
    listBox_0.insert(END, str(i)+".index")

listBox_0.selection_set(0) #activate first index

最初你调用了你的 listbox list ,这是一个很大的禁忌,因为它可能会导致后面的语法问题,所以我将 Listbox 的名称更改为listBox_0 ,所以这是你最初想要的新Listbox .

一旦我这样做了,我为每个前进和后退按钮创建了 2 个函数,我还必须重新排列代码以允许它正确地<bind>

我首先让第一个索引处于活动状态,这基本上会给我一个curselection()的值,然后我取那个值,把它变成一个 integer 我可以玩,然后每次你按下按钮,它就会变成提取索引,添加一个,然后删除以前的选择,然后使用indexLB添加新的更新选择

然后对backButtonFN进行相同的处理,除了这次,我减去 1 而不是添加,然后确保它一旦达到 0 就不会继续返回 go。

我还将listBox_0的配置更改为selectmode='single'以允许您连续使用 select 一个项目,如果您想要 select 多个,可以禁用此功能。

正如专业人士可能立即看到的那样,它肯定可以使用一些整理,但我希望这能回答你的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM