簡體   English   中英

Tkinter:如何在畫布中設置文本小部件的相對寬度?

[英]Tkinter: How to set relwidth of a Text widget in a Canvas?

在Tkinter中,將“文本”小部件放置在主窗口中時,可以設置“文本”小部件的寬度和主窗口的寬度之間的關系:

text.place(x = 10, y = 10, relwidth = 0.5)

如果“文本”窗口小部件的父窗口是“畫布”窗口小部件,是否可以執行相同的操作? 我嘗試使用Canvas itemconfig()方法,但是它不起作用:

text = Text(canvas)
canvas.create_window(10, 10, anchor = NW, window = text)
canvas.itemconfig(text, relwidth = 0.5)

在此先感謝您的幫助。

不,僅在使用place時顯式設置相對寬度才可用。 如果要在畫布上創建對象,則要由數學來配置對象的寬度。

通過綁定到畫布的<Configure>事件來重新計算文本小部件的寬度非常簡單,因為只要畫布更改大小(其他原因),該事件就會觸發。

這是一個將文本小部件放置在畫布上並將其寬度保持為畫布寬度一半的示例。 運行代碼,並注意在調整窗口大小時,文本小部件將保持為畫布寬度的50%。

import tkinter as tk

class Example():
    def __init__(self):
        self.root = tk.Tk()
        self.canvas = tk.Canvas(self.root, background="bisque")
        self.canvas.pack(fill="both", expand=True)

        self.text = tk.Text(self.canvas)
        print("feh:", str(self.text))
        self.canvas.create_window(10, 10, anchor="nw", window=self.text, tags=("text",))

        self.canvas.bind("<Configure>", self._canvas_resize)

    def _canvas_resize(self, event):
        relwidth = event.width / 2
        self.canvas.itemconfigure("text", width=relwidth)

e = Example()
tk.mainloop()

暫無
暫無

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

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