캔버스 크기에 맞게 tkinter 스크롤바 크기를 업데이트하는 방법

야호 뮤즈

따라서 캔버스 크기에 맞게 자동으로 업데이트되는 창에 세로 및 가로 스크롤 막대를 갖고 싶습니다. 나는 그것을 부분적으로 얻었고 지금 코드는 각 업데이트에 대해 추가 스크롤 막대를 만들고 가로 스크롤 막대는 전체 캔버스의 길이에 걸쳐 있지 않습니다. 이를 설명하기 위해 만든 샘플은 다음과 같습니다.

import tkinter
from tkinter import ttk



root = tkinter.Tk()
root.state("zoomed")
bigframe = tkinter.Frame(root)
bigframe.pack(fill="both", expand=1)
canvas = tkinter.Canvas(bigframe)
canvas.pack(side="left", fill="both", expand=1)
scrollbarv = ttk.Scrollbar(bigframe, orient="vertical", command=canvas.yview)
scrollbarh = ttk.Scrollbar(bigframe, orient="horizontal", command=canvas.xview)
scrollbarv.pack(side="right", fill="y")
scrollbarh.pack(side="bottom", fill="x")
canvas.configure(yscrollcommand=scrollbarv.set, xscrollcommand=scrollbarh.set)
canvas.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
mainframe = tkinter.Frame(canvas)
canvas.create_window((0, 0), window=mainframe, anchor="nw")


i = 1
text = "Hello World! "
def click():
    global i
    global text
    for t in range(10):
        i += 1
        text += "Hello World! "
        tkinter.Label(mainframe, text=text).pack()
    scrollbar = ttk.Scrollbar(bigframe, orient="vertical", command=canvas.yview)
    scrollbar.pack(side="right", fill="y")

button = tkinter.Button(mainframe, text="Click me!", command=click)
button.pack()

root.mainloop()

버튼을 4 번 클릭하면 다음과 같이됩니다.

I believe the horizontal scrollbar being small is due to me saying canvas.pack(side="left", fill="both", expand=1), but if I say side="top then the vertical scroll bars don't span the height of the canvas. Is there some specific piece of code that is causing the multiple scrollbars issue or the horizontal bar issue? And if so, how should I fix it?

Bowolf

You have to destroy the old scrollbar before you add a new one. Just add scrollbar.destroy() to your click function, like I did below:

def click():
    global i
    global text
    for t in range(10):
        i += 1
        text += "Hello World! "
        tkinter.Label(mainframe, text=text).pack()
    scrollbar = ttk.Scrollbar(bigframe, orient="vertical", command=canvas.yview)
    scrollbar.destroy()
    scrollbar.pack(side="right", fill="y")

I made the following changes to your code. At first it doesn't work, however if I resize the window it works perfectly.

import tkinter
from tkinter import ttk



root = tkinter.Tk()
root.state("zoomed")
bigframe = tkinter.Frame(root)
bigframe.pack(fill="both", expand=1)
canvas = tkinter.Canvas(bigframe)
canvas.pack(side="left", fill="both", expand=1)
scrollbarv = ttk.Scrollbar(bigframe, orient="vertical", 
command=canvas.yview)
scrollbarh = ttk.Scrollbar(root, orient="horizontal", 
command=canvas.xview)
scrollbarv.pack(side="right", fill="y")
scrollbarh.pack(side="bottom", fill="x")
canvas.configure(yscrollcommand=scrollbarv.set, 
xscrollcommand=scrollbarh.set)
canvas.bind("<Configure>", lambda e: 
canvas.configure(scrollregion=canvas.bbox("all")))
mainframe = tkinter.Frame(canvas)
canvas.create_window((0, 0), window=mainframe, anchor="nw")


i = 1
text = "Hello World! "

def updateScrollRegion():
    canvas.update_idletasks()
    canvas.config(scrollregion=mainframe.bbox())

def click():
    global i, scrollbarv, text
    for t in range(10):
        i += 1
        text += "Hello World! "
        tkinter.Label(mainframe, text=text).pack()

button = tkinter.Button(mainframe, text="Click me!", command=click)
button.pack()

root.mainloop()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Tkinter로 스크롤바 위치를 업데이트하는 방법

분류에서Dev

캔버스 텍스트를 크기에 맞게 트리밍

분류에서Dev

Python Tkinter 캔버스에 텍스트를 맞추는 방법

분류에서Dev

Python 3.8을 사용하여 Tkinter에서 캔버스에 스크롤바를 만드는 방법

분류에서Dev

김프에서 "레이어를 캔버스 크기에 맞추기"하는 방법이 있습니까?

분류에서Dev

tkinter 캔버스를 업데이트하는 방법?

분류에서Dev

라파엘 기반 캔버스 주위에 스크롤바를 배치하는 방법

분류에서Dev

모바일 및 데스크톱 장치에서 캔버스 크기를 조정하는 방법

분류에서Dev

Tkinter-내 팝업 창에 스크롤바를 추가하는 방법

분류에서Dev

페이지에서 지시문 업데이트를 스크롤하거나 크기를 조정하는 방법

분류에서Dev

오버플로를 숨기는 방법 : 가운데 div에서 스크롤바 스크롤

분류에서Dev

스크롤바를 가운데 맞추는 방법?

분류에서Dev

초기화 스크립트를 업데이트하는 방법

분류에서Dev

tkinter의 phpmyadmin에서 행 데이터를 업데이트 / 삭제하기 위해 테이블의 모든 행에 체크 박스를 추가하는 방법

분류에서Dev

캔버스 크기를 조정하는 방법

분류에서Dev

캔버스 스크롤 문제 tkinter

분류에서Dev

오버플로 스크롤에서 스크롤바를 제어하는 방법

분류에서Dev

drawImage, Max Width를 사용하여 캔버스에 맞게 이미지 크기 조정

분류에서Dev

화면 크기에 따라 캔버스 크기를 올바르게 조정하는 방법은 무엇입니까? 자바 스크립트 (p5.js) [해결됨]

분류에서Dev

Winforms 컨트롤에 바인딩 된 큰 데이터 소스에서 dbcontext의 크기를 제한하는 방법

분류에서Dev

Tkinter에서 캔버스 내에서 텍스트를 이동하는 방법

분류에서Dev

Tkinter는 스크롤바와 캔버스 테두리가 겹치지 않도록 프레임 크기를 수정했습니다.

분류에서Dev

글꼴 크기를 기준으로 캔버스에서 텍스트를 세로로 가운데 맞추기

분류에서Dev

스크롤하지 않고 모든 콘텐츠에 맞게 큰 목록으로 UITableView의 크기를 조정하는 방법은 무엇입니까?

분류에서Dev

문자열 필드의 크기에 맞게 확장하도록 텍스트 상자를 편집하는 방법

분류에서Dev

zurb 파운데이션 프레임 워크를 캔버스에서 평평하게 보이게하는 방법

분류에서Dev

Tkinter에서 FigureCanvasTkAgg 캔버스를 업데이트, 일시 중지 및 지우는 방법

분류에서Dev

tkinter 캔버스 스크롤바가 클래스에서 작동하지 않습니다.

분류에서Dev

tkinter 고정 캔버스 크기

Related 관련 기사

  1. 1

    Tkinter로 스크롤바 위치를 업데이트하는 방법

  2. 2

    캔버스 텍스트를 크기에 맞게 트리밍

  3. 3

    Python Tkinter 캔버스에 텍스트를 맞추는 방법

  4. 4

    Python 3.8을 사용하여 Tkinter에서 캔버스에 스크롤바를 만드는 방법

  5. 5

    김프에서 "레이어를 캔버스 크기에 맞추기"하는 방법이 있습니까?

  6. 6

    tkinter 캔버스를 업데이트하는 방법?

  7. 7

    라파엘 기반 캔버스 주위에 스크롤바를 배치하는 방법

  8. 8

    모바일 및 데스크톱 장치에서 캔버스 크기를 조정하는 방법

  9. 9

    Tkinter-내 팝업 창에 스크롤바를 추가하는 방법

  10. 10

    페이지에서 지시문 업데이트를 스크롤하거나 크기를 조정하는 방법

  11. 11

    오버플로를 숨기는 방법 : 가운데 div에서 스크롤바 스크롤

  12. 12

    스크롤바를 가운데 맞추는 방법?

  13. 13

    초기화 스크립트를 업데이트하는 방법

  14. 14

    tkinter의 phpmyadmin에서 행 데이터를 업데이트 / 삭제하기 위해 테이블의 모든 행에 체크 박스를 추가하는 방법

  15. 15

    캔버스 크기를 조정하는 방법

  16. 16

    캔버스 스크롤 문제 tkinter

  17. 17

    오버플로 스크롤에서 스크롤바를 제어하는 방법

  18. 18

    drawImage, Max Width를 사용하여 캔버스에 맞게 이미지 크기 조정

  19. 19

    화면 크기에 따라 캔버스 크기를 올바르게 조정하는 방법은 무엇입니까? 자바 스크립트 (p5.js) [해결됨]

  20. 20

    Winforms 컨트롤에 바인딩 된 큰 데이터 소스에서 dbcontext의 크기를 제한하는 방법

  21. 21

    Tkinter에서 캔버스 내에서 텍스트를 이동하는 방법

  22. 22

    Tkinter는 스크롤바와 캔버스 테두리가 겹치지 않도록 프레임 크기를 수정했습니다.

  23. 23

    글꼴 크기를 기준으로 캔버스에서 텍스트를 세로로 가운데 맞추기

  24. 24

    스크롤하지 않고 모든 콘텐츠에 맞게 큰 목록으로 UITableView의 크기를 조정하는 방법은 무엇입니까?

  25. 25

    문자열 필드의 크기에 맞게 확장하도록 텍스트 상자를 편집하는 방법

  26. 26

    zurb 파운데이션 프레임 워크를 캔버스에서 평평하게 보이게하는 방법

  27. 27

    Tkinter에서 FigureCanvasTkAgg 캔버스를 업데이트, 일시 중지 및 지우는 방법

  28. 28

    tkinter 캔버스 스크롤바가 클래스에서 작동하지 않습니다.

  29. 29

    tkinter 고정 캔버스 크기

뜨겁다태그

보관