[英]How to be able to select the text in a tkinter Message widget?
我的GUI設計很好。 我希望能夠選擇顯示在消息小部件中的文本。 我看到的唯一建議是要么以只讀模式使用Entry小部件,但這看起來與Message小部件完全不同,或者使用Text小部件又看上去完全不同。 如何在“ 消息”小部件中選擇文本?
如果無法做到這一點,我如何使“文本”或“條目”小部件看起來和行為與“消息”小部件相同?
簡短的答案是不,你不能。 您可能可以對事件捕獲進行一些巧妙的解決方法,但是它比您預期的要多得多。
正如您提到的,最可能的實現方法是在Entry
或Text
小部件上模擬Message
外觀。 一種簡單的方法是使用ttk.Style
來復制ttk.Style
下的小部件的ttk
。 但是,在ttk
下沒有Message
小部件,但是Label
非常接近:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
lbl = ttk.Label(root, text='foo')
lbl.winfo_class()
# 'TLabel'
# This means ttk.Label uses a 'TLabel' style
# Set a StringVar to update the message without updating the state
my_txt = tk.StringVar()
my_msg = ttk.Entry(root, text=my_txt, style='TLabel', justify='center', state='readonly')
# justify to emulate the Message look (centered).
# state = `readonly` to protect the Entry from being overwritten
my_txt.set('message here')
您的Entry
窗口小部件現在看起來像是一個Message
窗口小部件,帶有文本'message here'
的文本無需復制訪問即可復制。
編輯:如果要基於字符調整條目的大小,並假設您使用的是固定長度的字體,則可以嘗試以下操作:
my_msg.pack(expand=True, fill=tk.BOTH)
my_txt.set('this is a way longer message so give it a try whatever')
my_msg.configure(width=len(my_txt.get()))
如果您的字體不是固定長度,則可以對每個字符增加的平均寬度/最大寬度進行估計,並將該比率乘以len()
:
my_msg.configure(width=int(len(my_txt.get())*0.85))
# where you anticipate each character might take only up to 85% of the normal character width
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.