我有一個tkinker帶有幾個按鈕和布局的視窗,這些按鈕和布局使用了 place。我試圖為整個視窗創建一個滾動條,但我無法將按鈕放在框架中。有人可以幫我,我怎樣才能在框架上添加這個按鈕?
#btn1 = tk.Button(win,
text="Browse...",
compound="left",
fg="blue", width=22,
font=("bold", 10),
height=1,
)
#btn1.place(x=600, y=0)
import json
from tkinter import *
import tkinter as tk
from tkinter import filedialog as fd
win = Tk()
win.geometry("500x500")
# main
main_frame = Frame(win)
main_frame.pack(fill=BOTH, expand=1)
# canvas
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# scrollbar
my_scrollbar = tk.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"))
)
second_frame = Frame(my_canvas)
my_canvas.create_window((0, 0), window=second_frame, anchor="nw")
uj5u.com熱心網友回復:
創建一個可滾動的框架:
如果要使框架(例如target_frame)可滾動,則必須遵循以下 5 個步驟:
- 創建一個框架(比如
outer_frame)作為畫布和滾動條的父級。 - 使用該方法
target_frame作為專案添加到畫布。.create_window() command = canvas.yview使用和yscrollcommand = scrollbar.set在適當的位置將畫布和滾動條相互連接。- 指定畫布的哪個區域應該是可滾動的。如果您希望整個畫布可滾動,請使用
canvas.configure(scrollregion = canvas.bbox("all"). - 將所有必需的小部件添加到
target_frame,而不是outer_frame或 畫布。

解決方案:
從廣義上講,您的代碼存在以下 3 個問題:
- 您還沒有提供
win.mainloop(),否則您的 tkinter 應用程式將無法打開。 - 的父母
btn1應該是second_frame,不是win。 second_frame尚未用 awidth和初始化height。每當使用該.create_window()方法將框架添加到畫布時,它必須具有預定義的widthandheight。否則,框架將不會顯示。
另外,請記住,要使垂直滾動條正常作業,heightofsecond_frame應該大于heightof my_canvas。
在您的代碼中target_frame,分別outer_frame對應second_frame和 main_frame。我對您的代碼進行了上述 3 項更改以使其正常作業。
作業代碼:
import json
from tkinter import *
import tkinter as tk
from tkinter import filedialog as fd
win = Tk()
win.geometry("500x500")
# main
main_frame = Frame(win)
main_frame.pack(fill=BOTH, expand=1)
# canvas
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# scrollbar
my_scrollbar = tk.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"))
)
second_frame = Frame(my_canvas, width = 1000, height = 100)
btn1 = tk.Button(second_frame,
text="Browse...",
compound="left",
fg="blue", width=22,
font=("bold", 10),
height=1,
)
btn1.place(x=600, y=0)
my_canvas.create_window((0, 0), window=second_frame, anchor="nw")
win.mainloop()
uj5u.com熱心網友回復:
對于初學者,我建議您洗掉多余的匯入陳述句。為了便于閱讀,我會使用 import tkinter as tk,知道您的代碼從哪個模塊呼叫函式和方法總是很高興。看起來您設定了視窗大小并將按鈕放在外面。我調整了你的 x 和 y 位置。下面的示例會將按鈕放在您的螢屏上。
import json
import tkinter as tk
from tkinter import filedialog as fd
win = tk.Tk()
win.geometry("500x500")
# main
main_frame = tk.Frame(win)
main_frame.pack(fill=tk.BOTH, expand=1)
# canvas
my_canvas = tk.Canvas(main_frame)
my_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
# scrollbar
my_scrollbar = tk.Scrollbar(main_frame, orient=tk.VERTICAL, command=my_canvas.yview)
my_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
btn1 = tk.Button(main_frame,
text="Browse...",
compound="left",
fg="blue", width=22,
font=("bold", 10),
height=1,
)
btn1.place(x=300, y=300)
# configure the canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all")))
second_frame = tk.Frame(my_canvas)
my_canvas.create_window((0, 0), window=second_frame, anchor="nw")
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/453978.html
