[英]Is there an Alternative to textvariable on ttk.Entry widget, for tk.Text widget on TK inter?
因此根据 Tkinter 文档,Entry 小部件的目的是允许用户输入或编辑单行文本。 我想输入并编辑多行文本,但出现问题。 tkinter 文本建议的替代方案根本无法完成工作!
这是我使用 ttk.Entry 的代码:
def _set_project_description_frame(self):
project_description_frame = ttk.Frame(self._main_frame)
ttk.Label(project_description_frame, text="Project Description").pack(side=tk.TOP, anchor="nw")
ttk.Entry(project_description_frame, textvariable=self._project_description).pack(side=tk.LEFT,
expand=True, fill=tk.X)
return project_description_frame
但我真正想要的是让描述部分看起来像一个描述 go 的地方,所以我用 tk.Text 替换了 ttk.Entry:
def _set_project_description_frame(self):
project_description_frame = ttk.Frame(self._main_frame)
ttk.Label(project_description_frame, text="Project Description").pack(side=tk.TOP, anchor="nw")
tk.Text(project_description_frame, height=5).pack(side=tk.LEFT, expand=True, fill=tk.X)
return project_description_frame
最后的结果正是我想要的,但问题是,如果不将textvariable=self._project_description
传递给tk.Text
,就不可能实际保存输入到该文本字段中的任何内容。
所以我的问题是,当我无法将textvariable=self._project_description
传递给它时,如何修复代码以便能够像 ttk.Entry 一样捕获输入到文本字段中的内容?
Text
小部件不支持textvariable
,因为Text
小部件可以包含的不仅仅是文本。 要从Text
小部件中获取内容,您需要调用小部件上的get
方法。
要获取小部件的所有内容,您首先需要保留对小部件的引用。 然后,只需使用所需文本范围的索引调用get
即可。 通常这两个索引是第一个字符的字符串"1.0"
,文本小部件本身添加的换行符之前的最后一个字符的"end-1c"
。
def _set_project_description_frame(self):
...
self.text_widget = tk.Text(project_description_frame, height=5)
self.text_widget.pack(side=tk.LEFT, expand=True, fill=tk.X)
...
有了它,代码中任何其他需要获取数据的地方都可以这样做:
self.text_widget.get("1.0", "end-1c")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.