首页 > 解决方案 > 如何让 tkinter 滚动条工作(灰色)

问题描述

我正在创建一个简单的 tkinter 应用程序。当用户按下按钮时,会出现一个图像。如果他们再次按下它,则会出现另一个图像等。所以我想要一个滚动条,以便用户可以滚动到出现在页面外的图像。我不确定我做错了什么,但滚动条显示为灰色并且无法正常工作。

import calendar
import tkinter as tk
from tkinter import ttk


root = tk.Tk()
root.geometry('800x800')


x = 30
y = 30
box_image = tk.PhotoImage(file='apple.png')



### SCROLL BAR ###

# create a main frame
main_frame = tk.Frame(root)
main_frame.pack(fill='both', expand=1)

# create a canvas
my_canvas = tk.Canvas(main_frame)
my_canvas.pack(side='left', fill='both', expand=1)

# add a scrollbar to the canvas
my_scrollbar = ttk.Scrollbar(main_frame, orient='vertical', command=my_canvas.yview)
my_scrollbar.pack(side='right', fill='y')

# configure the canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))

# create Another frame inside the canvas
second_frame = tk.Frame(my_canvas)

# add that new frame to a window in the canvas
my_canvas.create_window((0,0), window=second_frame, anchor="nw", width="10000")

def display():
    global x , y
    panel2 = tk.Label(main_frame, image=box_image, bg='#f7f6f6')
    panel2.place(x=x, y=y) 
    x = x
    y = y+200


button = tk.Button(second_frame, text="click me", command=display)
button.place(x=0, y=0)

label = tk.Label(second_frame, text="label", bg="blue")
label.pack(fill="x", padx=50)

new_frame = tk.Frame(second_frame, bg='black', height=110)
new_frame.pack(fill="x")

root.mainloop()

标签: pythontkintercanvas

解决方案


您需要将图像放入second_frame,而不是放入main_frame.


推荐阅读