簡體   English   中英

tkinter 中的滾動條和搜索欄

[英]Scrollbar and search bar in tkinter

listacsv = os.path.abspath("spiders//")

game = tk.Tk()
game.geometry("1000x650")
game.title('test')
game.resizable(0,0)

entry = tk.Entry(game)
entry.pack(side="left", ipady=5, ipadx=65, anchor='nw', padx=10, pady=10)

frame1 = tk.Frame(game)
frame1.pack(side='right', padx=5)
canvas = tk.Canvas(frame1,width=500,height=700,scrollregion=(100,120,5000,5000))
vbar=tk.Scrollbar(frame1,orient='vertical')
vbar.pack(side='right',fill='y')
vbar.config(command=canvas.yview)
canvas.config(width=500,height=700)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side='right',expand=True,fill='both')

tk.Button(game, text='Options',activebackground='#87a0c7',relief='solid', command='', height = 2, width = 10).place(x=5, y=600) 

with open(listacsv + '/list.csv', newline='', encoding="utf8") as f:
    reader = csv.reader(f)
    next(f)
    data = list(reader)

c = 4
r = math.ceil(len(data)/c)
for i, item in enumerate(data):
    onclick = lambda url=item[0]: webbrowser.open(url)
    tk.Button(canvas, text=item[1], command=onclick, activebackground='#87a0c7',relief='sunken', height = 3, width = 19, padx=10).grid(column=i//r, row=i%r)      


verlabel=tk.Label(game, text='Version: '+ currentver, relief='flat')
verlabel.place(x=125, y=619)
game.mainloop() 

我看到滾動條,但它對框架沒有影響,按鈕不動。

關於如何僅顯示文本中包含搜索欄中文字的按鈕的任何想法?

提前致謝!

問題是您將按鈕放在游戲窗口中,將滾動條放在 frame1 中。 確保按鈕和滾動條位於同一事物中 如果您希望 frame1 上有其他任何內容,請更改它。 在它們相同之后,您的代碼將如下所示:

listacsv = os.path.abspath("spiders//")

game = tk.Tk()
game.geometry("1000x650")
game.title('test')
game.resizable(0,0)

entry = tk.Entry(game)
entry.pack(side="left", ipady=5, ipadx=65, anchor='nw', padx=10, pady=10)

frame1 = tk.Frame(game)
frame1.pack(side='right', padx=5)
canvas = tk.Canvas(frame1,width=500,height=700,scrollregion=(100,120,5000,5000))
vbar=tk.Scrollbar(frame1,orient='vertical')
vbar.pack(side='right',fill='y')
vbar.config(command=canvas.yview)
canvas.config(width=500,height=700)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side='right',expand=True,fill='both')

tk.Button(frame1, text='Options',activebackground='#87a0c7',relief='solid', command='', height = 2, width = 10).place(x=5, y=600) 

with open(listacsv + '/list.csv', newline='', encoding="utf8") as f:
    reader = csv.reader(f)
    next(f)
    data = list(reader)

c = 4
r = math.ceil(len(data)/c)
for i, item in enumerate(data):
    onclick = lambda url=item[0]: webbrowser.open(url)
    tk.Button(canvas, text=item[1], command=onclick, activebackground='#87a0c7',relief='sunken', height = 3, width = 19, padx=10).grid(column=i//r, row=i%r)      


verlabel=tk.Label(frame1, text='Version: '+ currentver, relief='flat')
verlabel.place(x=125, y=619)
game.mainloop()

好的,我考慮到了答案,設法做到了,我發布了代碼,以防有人遇到同樣的問題。

frame1 = tk.Frame(game)
frame1.pack(side='right', padx=0)
canvas = tk.Canvas(frame1,width=660,height=700)
canvas.pack(side='right',expand=True)
my_scrollbar = ttk.Scrollbar(frame1, orient='vertical', command=canvas.yview)
my_scrollbar.pack(side='right', fill='y') 
my_scrollbar.place(x=645,relheight='1')

canvas.configure(yscrollcommand=my_scrollbar.set)
canvas.bind("<Configure>", lambda e: canvas.configure(scrollregion = canvas.bbox("all")))
second_frame = tk.Frame(canvas)

canvas.create_window((0,0), window=second_frame, anchor='ne')

然后將 second_frame 用於小部件。 謝謝你們!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM