首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在guizero/tkinter中将滑块转换为滚动条?

如何在guizero/tkinter中将滑块转换为滚动条?
EN

Stack Overflow用户
提问于 2021-06-04 18:04:51
回答 1查看 290关注 0票数 0

我正在尝试使用Guizero中与app窗口和box小部件一起工作的滑块小部件来制作滚动条。我已经想出了一种使用滑块来移动对象的方法,但是它不会动态变化。我需要一种方法的滑块长度和限制,它可以滚动/移动的基础上,有多少项目是不可见的。我已经尝试使用tkinter直接滚动条直接与Guizero,但它只显示,但不工作。我需要使用滑块,因为它是最容易添加到小部件的。

我用的是

我想做什么,

  • 使用Guizero
  • 改变滑块长度(就像你的网页浏览器一样)
  • 更改最大滚动限制(根据不可见的数量)

我的当前代码

基于Joe Michail tkinter:将滚轮绑定到滚动条上的回答

代码语言:javascript
复制
from guizero import *
app=App(title='Guizero - Scrollbar slider',bg='blue',height=500,width=350)
def mouse_wheel(event):
    global count
    # respond to Linux or Windows wheel event
    if event.num == 4 or event.delta == -120:
        if count!=200:
            count += 2
    if event.num == 5 or event.delta == +120:
        if count>=0:
            count -= 2
    slider.value=count
    boxs.tk.place(x=0,y=-count)
count = 0

def slide():
    global count
    count=slider.value
    boxs.tk.place(x=0,y=-count)

# with Windows OS
app.tk.bind("<MouseWheel>", mouse_wheel)
# with Linux OS
app.tk.bind("<Button-4>", mouse_wheel)
app.tk.bind("<Button-5>", mouse_wheel)

#slider end need to change
slider = Slider(app,horizontal=False,width=8,height='fill',start=0, end=200,align='right',command=slide)
slider.tk.config(sliderrelief='flat',
                 sliderlength=(app.height/4),#need to change length dynamically
                 bd=1,
                 borderwidth=1,
                 highlightthickness=0,
                 showvalue=True,
                 fg='white',
                 troughcolor='white',
                 activebackground='orange',
                 bg='blue')

boxs=Box(app,align='right')

for x in range(1,12):    
    Hello_text=Text(boxs, text=" \nHello\n"+str(x), align="top")
    #change the look so you can tell them apart
    if x%2==1:
        Hello_text.bg='white'
    else:
        Hello_text.bg='lightblue'

#default box location
boxs.tk.place(x=0,y=0)

app.display()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-05 02:37:16

只要boxs调整大小,就可以使用分配给boxs.when_resized的回调来更新滑块范围。

代码语言:javascript
复制
def on_boxs_resized(event):
    slider.tk.config(to=event.tk_event.height-app.tk.winfo_height())

boxs.when_resized = on_boxs_resized

请注意,您可以简化这两个函数,mouse_wheel()slide(),而无需使用全局变量count

代码语言:javascript
复制
def mouse_wheel(event):
    slider.value += 2 if event.delta < 0 else -2

def slide():
    boxs.tk.place(x=0, y=-slider.value)

Updated:您可以在分配给app.when_resized的回调中更新app.when_resized选项

代码语言:javascript
复制
def on_app_resized(event):
    percent = min(app.height/boxs.tk.winfo_height(), 1.0)
    sliderlength = slider.tk.winfo_height() * percent
    slider.tk.config(sliderlength=sliderlength)

app.when_resized = on_app_resized

# update the app
app.tk.update()
# adjust sliderlength of slider
on_app_resized(None)

app.display()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67842051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档