第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有標簽、畫布和框架的 Tkinter 滾動條

帶有標簽、畫布和框架的 Tkinter 滾動條

喵喔喔 2023-04-18 15:03:53
我想制作一個頁面,右邊有一些標簽,左邊有一些其他標簽及其各自的滾動條。但我沒能做到。from tkinter import *root = Tk()root.columnconfigure(0, weight=1)root.columnconfigure(2, weight=1)canvasL = Canvas(root, bg='blue')canvasL.grid(row=0, column=0, sticky="news")canvasR = Canvas(root, bg='blue')canvasR.grid(row=0, column=2, sticky="news")frameL = Frame(canvasL, bg='red', width=1000)frameL.grid(row=0, column=0, sticky="news")frameR = Frame(canvasR, bg='red')frameR.grid(row=0, column=0, sticky="news")frameL.grid_propagate(False)frameR.grid_propagate(False)S1 = Scrollbar(frameL, orient="vertical", command=canvasL.yview)S1.grid(row=0, column=1, sticky="news")S2 = Scrollbar(frameR, orient="vertical", command=canvasR.yview)S2.grid(row=0, column=3, sticky="news")canvasL.configure(yscrollcommand=S1.set)canvasL.configure(scrollregion=canvasL.bbox("all"))canvasR.configure(yscrollcommand=S2.set)canvasR.configure(scrollregion=canvasR.bbox("all"))canvasL.create_window((0, 0), anchor='nw', window=frameL)canvasR.create_window((0, 0), anchor='nw', window=frameR)for i in range(0, 40):    labelName = Label(frameL, text="Name : " + str(i), bg='#F5F5F5')    labelName.grid(row=i, column=0)    labelName = Label(frameR, text="Name : " + str(i), bg='#F5F5F5')    labelName.grid(row=i, column=2)root.mainloop()如果您測試此代碼,您會發(fā)現(xiàn)存在問題。你能幫我嗎 ?先感謝您。
查看完整描述

3 回答

?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

首先你不應該執(zhí)行以下兩行:


frameL.grid(row=0, column=0, sticky="news")

frameR.grid(row=0, column=0, sticky="news")

因為您不應該使用grid()orpack()或將小部件放入畫布中place()。你后來用過create_window(...)把它們放到畫布上。


其次,兩個滾動條的父項應該是root:


S1 = Scrollbar(root, orient="vertical", command=canvasL.yview)

S1.grid(row=0, column=1, sticky="ns")


S2 = Scrollbar(root, orient="vertical", command=canvasR.yview)

S2.grid(row=0, column=3, sticky="ns")

另外,您也不應該執(zhí)行以下兩行:


frameL.grid_propagate(False)

frameR.grid_propagate(False)

因為它們可能使兩個框架的高度為零。


最后,您必須在調用后調用以下兩行root.update():


root.update()

canvasL.configure(scrollregion=canvasL.bbox("all"))

canvasR.configure(scrollregion=canvasR.bbox("all"))

但最好scrollregion在調整框架大小時更新:


frameL.bind('<Configure>', lambda e: canvasL.config(scrollregion=canvasL.bbox('all')))

frameR.bind('<Configure>', lambda e: canvasR.config(scrollregion=canvasR.bbox('all')))

以下是基于您的修改示例:


from tkinter import *


root = Tk()


root.columnconfigure(0, weight=1)

root.columnconfigure(2, weight=1)


canvasL = Canvas(root, bg='blue', highlightthickness=0)

canvasL.grid(row=0, column=0, sticky="news")


canvasR = Canvas(root, bg='blue', highlightthickness=0)

canvasR.grid(row=0, column=2, sticky="news")


frameL = Frame(canvasL, bg='red', width=1000)

#frameL.grid(row=0, column=0, sticky="news")


frameR = Frame(canvasR, bg='red')

#frameR.grid(row=0, column=0, sticky="news")


#frameL.grid_propagate(False)

#frameR.grid_propagate(False)


S1 = Scrollbar(root, orient="vertical", command=canvasL.yview)

S1.grid(row=0, column=1, sticky="ns")


S2 = Scrollbar(root, orient="vertical", command=canvasR.yview)

S2.grid(row=0, column=3, sticky="ns")


canvasL.configure(yscrollcommand=S1.set)

canvasR.configure(yscrollcommand=S2.set)


canvasL.create_window((0, 0), anchor='nw', window=frameL)

canvasR.create_window((0, 0), anchor='nw', window=frameR)


for i in range(0, 40):

    labelName = Label(frameL, text="Name : " + str(i), bg='#F5F5F5')

    labelName.grid(row=i, column=0)

    labelName = Label(frameR, text="Name : " + str(i), bg='#F5F5F5')

    labelName.grid(row=i, column=2)


root.update()

canvasL.configure(scrollregion=canvasL.bbox("all"))

canvasR.configure(scrollregion=canvasR.bbox("all"))


# better update scrollregion upon resize of frame

#frameL.bind('<Configure>', lambda e: canvasL.config(scrollregion=canvasL.bbox('all')))

#frameR.bind('<Configure>', lambda e: canvasR.config(scrollregion=canvasR.bbox('all')))


root.mainloop()



查看完整回答
反對 回復 2023-04-18
?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

檢查我的答案:

按照以下步驟scroll widget操作canvas

  1. 創(chuàng)建第 1 幀,這將容納畫布和滾動條

  2. 創(chuàng)建將在畫布上滾動的第 2 幀,您可以在此框架上網(wǎng)格化任何小部件,但您需要使用canvas.create_window.

您可以在評論中討論額外的問題。

import tkinter as tk

from tkinter import ttk


root = tk.Tk()

root.geometry('800x400+0+0')

root.columnconfigure(0, weight=1)

root.columnconfigure(1, weight=1)

root.rowconfigure(0, weight=1)


########################################################################

######## Left Side ####################################################

left_container = tk.Frame(root, bg='green')

left_container.grid(row=0, column=0, sticky='nsew', padx=(0, 2))

left_container.columnconfigure(0, weight=1)

left_container.rowconfigure(0, weight=1)


left_canvas = tk.Canvas(left_container, bg='orange')

left_canvas.grid(row=0, column=0, sticky='nsew')


left_scrollbar = tk.Scrollbar(left_container, orient='vertical', command=left_canvas.yview)

left_scrollbar.grid(row=0, column=1, sticky='nsew')

left_canvas['yscrollcommand'] = left_scrollbar.set


left_canvas.columnconfigure(0, weight=1)

left_canvas.rowconfigure(0, weight=1)


left_final_window = tk.Frame(left_canvas, bg='green')

left_canvas.create_window((0, 0), window=left_final_window, anchor='nw', tags='expand1')

left_final_window.columnconfigure(0, weight=1)


for i in range(1, 51):

    label = tk.Label(left_final_window, text=f'Manish Pushpam ({i})')

    label.grid(row=i-1, column=0, sticky='nsew', pady=(0, 2))



left_canvas.bind('<Configure>', lambda event: left_canvas.itemconfigure('expand1', width=event.width))

left_final_window.update_idletasks()

left_canvas.config(scrollregion=left_canvas.bbox('all'))

############### Scroll Using Mouse Wheel ###############

def scroll(event, widget):

    widget.yview_scroll(int(-1 * (event.delta / 120)), "units")



def final_scroll(event, widget, func):

    widget.bind_all("<MouseWheel>", func)



def stop_scroll(event, widget):

    widget.unbind_all("<MouseWheel>")



left_canvas.bind("<Enter>", lambda event: final_scroll(event, left_canvas, lambda event: scroll(event, left_canvas)))

left_canvas.bind("<Leave>", lambda event: stop_scroll(event, left_canvas))

########################################################################

######## Right Side ####################################################

right_container = tk.Frame(root, bg='orange')

right_container.grid(row=0, column=1, sticky='nsew')

right_container.columnconfigure(0, weight=1)

right_container.rowconfigure(0, weight=1)


right_canvas = tk.Canvas(right_container, bg='red')

right_canvas.grid(row=0, column=0, sticky='nsew')


right_scrollbar = tk.Scrollbar(right_container, orient='vertical', command=right_canvas.yview)

right_scrollbar.grid(row=0, column=1, sticky='nsew')

right_canvas['yscrollcommand'] = right_scrollbar.set


right_canvas.columnconfigure(0, weight=1)

right_canvas.rowconfigure(0, weight=1)


right_final_window = tk.Frame(right_canvas, bg='green')

right_canvas.create_window((0, 0), window=right_final_window, anchor='nw', tags='expand')

right_final_window.columnconfigure(0, weight=1)


for i in range(1, 51):

    label = tk.Label(right_final_window, text=f'Manish Pushpam ({i})')

    label.grid(row=i-1, column=0, sticky='nsew', pady=(0, 2))


right_canvas.bind_all('<Configure>', lambda event: right_canvas.itemconfigure('expand', width=event.width))

right_final_window.update_idletasks()

right_canvas.config(scrollregion=right_canvas.bbox('all'))


right_canvas.bind("<Enter>", lambda event: final_scroll(event, right_canvas, lambda event: scroll(event, right_canvas)))

right_canvas.bind("<Leave>", lambda event: stop_scroll(event, right_canvas))

root.mainloop()


查看完整回答
反對 回復 2023-04-18
?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

此更正解決了問題。玩它。還學習如何使用 ttk 來美化你的 GUI




from tkinter import *


root = Tk()


root.columnconfigure(0, weight=1)

root.columnconfigure(2, weight=1)


canvasL = Canvas(root, bg='blue')

canvasL.grid(row=0, column=0, sticky="news")


canvasR = Canvas(root, bg='blue')

canvasR.grid(row=0, column=2, sticky="news")


frameL = Frame(canvasL, bg='red', width=1000)

frameL.grid(row=0, column=0, sticky="news")


frameR = Frame(canvasR, bg='red')

frameR.grid(row=0, column=0, sticky="news")


frameL.grid_propagate(False)

frameR.grid_propagate(False)


S1 = Scrollbar(frameL, orient="vertical", command=canvasL.yview)

S1.grid(row=0, column=1, sticky="news")


S2 = Scrollbar(frameR, orient="vertical", command=canvasR.yview)

S2.grid(row=0, column=3, sticky="news")


canvasL.configure(yscrollcommand=S1.set)

canvasL.configure(scrollregion=canvasL.bbox("all"))


canvasR.configure(yscrollcommand=S2.set)

canvasR.configure(scrollregion=canvasR.bbox("all"))


canvasL.create_window((0, 0), anchor='nw', window=frameL)

canvasR.create_window((0, 0), anchor='nw', window=frameR)


for i in range(0, 40):

#use the cavasL and canvasR directly, they are at the closer to #the root

    labelName = Label(canvasL, text="Name : " + str(i), bg='#F5F5F5')

    labelName.grid(row=i, column=0)

    labelName = Label(canvasR, text="Name : " + str(i), bg='#F5F5F5')

    labelName.grid(row=i, column=2)


root.mainloop()


查看完整回答
反對 回復 2023-04-18
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號