簡體   English   中英

如何在tkinter消息小部件中選擇文本?

[英]How to be able to select the text in a tkinter Message widget?

我的GUI設計很好。 我希望能夠選擇顯示在消息小部件中的文本。 我看到的唯一建議是要么以只讀模式使用Entry小部件,但這看起來與Message小部件完全不同,或者使用Text小部件又看上去完全不同。 如何在“ 消息”小部件中選擇文本

如果無法做到這一點,我如何使“文本”或“條目”小部件看起來和行為與“消息”小部件相同?

簡短的答案是不,你不能。 您可能可以對事件捕獲進行一些巧妙的解決方法,但是它比您預期的要多得多。

正如您提到的,最可能的實現方法是在EntryText小部件上模擬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.

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