gpt4 book ai didi

python - Tkinter - 添加滚动条时文本小部件缩小

转载 作者:太空宇宙 更新时间:2023-11-04 09:09:39 25 4
gpt4 key购买 nike

我正在使用 Python 2.7 中的 Tkinter 为一个简单的测验应用开发 GUI。到目前为止,我已经开始设置我的框架。我在名为 results_txtbx 的文本小部件内放置了一个滚动条,用于上下滚动列表,记录玩家在每个问题上的表现。我一直在使用 grid,因为它更易于管理。

from Tkinter import *

class Q_and_A:

def __init__(self, master):
frame = Frame(master)

Label(master).grid(row = 4)

results_txtbx = Text(master)
results_scrbr = Scrollbar(results_txtbx)
results_scrbr.grid(sticky = NS + E)

results_txtbx.config(width = 20, height = 4, wrap = NONE, yscrollcommand = results_scrbr.set)
results_txtbx.grid(row = 3, column = 1, padx = 12, sticky = W)



root = Tk()
root.wm_title("Question and Answer")
root.resizable(0, 0)

app = Q_and_A(root)
root.mainloop()

当它运行时,results_txtbx 会调整大小以适应滚动条。有什么方法可以使用 grid 使其保持原来的大小?

最佳答案

您不想将文本小部件用作滚动条的主控部件。与任何其他小部件一样,如果您在文本小部件中打包或网格化滚动条,文本小部件将收缩或扩展以适合滚动条。这就是你问题的症结所在。

相反,创建一个单独的框架(您已经在做),并将该框架用作文本小部件和滚动条的父级。如果您想要滚动条位于内部的外观,请将文本小部件的 borderwidth 设置为零,然后为包含的框架提供一个小边框。

作为最后的可用性提示,我建议不要使窗口不可调整大小。您的用户可能比您更了解他们想要的窗口大小。不要将控制权从您的用户手中夺走。

以下是(大致)我将如何实现您的代码:

  • 我会使用 import Tkinter as tk 而不是 from Tkinter import * 因为全局导入通常不是一个好主意。
  • 我会让 Q_and_A 成为 tk.Frame 的子类,这样它就可以被视为一个小部件。
  • 我会调整整个窗口的大小
  • 我会将小部件创建与小部件布局分开,因此我的所有布局选项都在一个地方。 IMO,这使得编写和维护更容易。
  • 正如我在回答中提到的,我会将文本和滚动条小部件放在一个框架内

最终结果如下:

import Tkinter as tk

class Q_and_A(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, borderwidth=1, relief="sunken")
self.label = tk.Label(self)
self.results_txtbx = tk.Text(self, width=20, height=4, wrap="none",
borderwidth=0, highlightthickness=0)
self.results_scrbr = tk.Scrollbar(self, orient="vertical",
command=self.results_txtbx.yview)
self.results_txtbx.configure(yscrollcommand=self.results_scrbr.set)

self.label.grid(row=1, columnspan=2)
self.results_scrbr.grid(row=0, column=1, sticky="ns")
self.results_txtbx.grid(row=0, column=0, sticky="nsew")
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)

root = tk.Tk()
root.wm_title("Question And Answer")

app = Q_and_A(root)
app.pack(side="top", fill="both", expand=True)
root.mainloop()

关于python - Tkinter - 添加滚动条时文本小部件缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16806200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com