Tkinter选项卡中放置两个相邻文本框时首个文本框垂直滚动条消失
Tkinter选项卡多文本框滚动条消失问题解决方案
核心问题原因
- 列索引分配不合理:第二个文本框位于
column=2,对应的垂直滚动条不需要跳转到column=4,空出中间列反而会导致布局挤压 - 未配置grid布局权重:grid默认不会根据窗口大小自动分配列/行的拉伸空间,未设置权重时控件拉伸会挤压相邻控件的显示空间
- 第一个文本框sticky参数不全:第一个文本框仅设置了
sticky="ns",仅能垂直方向自适应,宽度无法跟随单元格变化,容易和滚动条出现显示冲突
修正后代码
# 先配置tab2的网格布局权重,文本框列权重设为1自动拉伸,滚动条列权重设为0固定宽度 self.tab2.grid_columnconfigure(0, weight=1) self.tab2.grid_columnconfigure(2, weight=1) self.tab2.grid_rowconfigure(0, weight=1) # 第一个文本框+滚动条 self.txtputthrough = tk.Text(self.tab2, height=25) self.txtputthrough.grid(row=0, column=0, sticky="nsew") self.vsb4 = ttk.Scrollbar(self.tab2, command=self.txtputthrough.yview, orient="vertical") self.vsb4.grid(row=0, column=1, sticky="ns") self.hsb4 = ttk.Scrollbar(self.tab2, command=self.txtputthrough.xview, orient="horizontal") self.hsb4.grid(row=1, column=0, sticky="ew") self.txtputthrough.configure(yscrollcommand=self.vsb4.set, xscrollcommand=self.hsb4.set) # 第二个文本框+滚动条 self.txtputthrough2 = tk.Text(self.tab2, height=25) self.txtputthrough2.grid(row=0, column=2, sticky="nsew") self.vsb5 = ttk.Scrollbar(self.tab2, command=self.txtputthrough2.yview, orient="vertical") self.vsb5.grid(row=0, column=3, sticky="ns") self.hsb5 = ttk.Scrollbar(self.tab2, command=self.txtputthrough2.xview, orient="horizontal") self.hsb5.grid(row=1, column=2, sticky="ew") self.txtputthrough2.configure(yscrollcommand=self.vsb5.set, xscrollcommand=self.hsb5.set)
修改后两个文本框会平分选项卡的水平空间,各自的滚动条都可以正常显示,窗口拉伸时文本框会跟随自适应大小,不会出现滚动条被挤压消失的问题。
内容的提问来源于stack exchange,提问作者neikel
相关产品推荐
相关产品推荐

