【问题标题】:ScrolledText not appearing with tkinter grid layoutScrolledText 没有出现在 tkinter 网格布局中
【发布时间】:2016-03-15 21:24:24
【问题描述】:

.pack() 与我的ScrolledText 小部件一起用于tkinter 时,正确的框会出现一个带有滚动条的文本框。但是,当我将其切换为使用 .grid() 时,它不再出现在窗口中。刚刚没了。

我的代码的适用部分如下所示:

import tkinter as tk
import tkinter.scrolledtext as tkst
import tkinter.font as tkFont
import tkinter.ttk as ttk
class Application(tk.Frame):

def __init__(self, master=None):
    tk.Frame.__init__(self, master)
    # self.grid()
    self.createWidgets()

def createWidgets(self):
    self.logArea = tkst.ScrolledText(self,
                wrap   = tk.WORD,
                width  = 20,
                height = 8,
                state="disabled",
                name="logArea"
            )
            self.logArea.grid(padx=10, pady=10,row=1, sticky=tk.W)

root = tk.Tk()
app = Application(master=root)
app.mainloop()

我在第 1 行有一个 Treeview 小部件,它显示正常,只是由于某种原因,这个 ScrolledText 小部件根本不显示,但是当我之前只使用 pack() 时工作​​正常。

知道有什么问题吗?

编辑:我在 init 中添加了一个self.master = master,然后在我的 ScrolledText 的初始化中使用了self.master 而不仅仅是self。我不确定为什么这解决了这个问题,很高兴知道为什么会解决这个问题。

【问题讨论】:

标签: python tkinter


【解决方案1】:

此修订版添加了类语句,应用程序框架网格化到根窗口中,并且文本框未禁用,可以正常工作。

import tkinter as tk
import tkinter.scrolledtext as tkst
import tkinter.font as tkFont
import tkinter.ttk as ttk

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
    def createWidgets(self):
        self.logArea = tkst.ScrolledText(self,
                    wrap   = tk.WORD,
                    width  = 20,
                    height = 8,
                    #state="disabled",
                    name="logArea"
                )
        self.logArea.grid(padx=10, pady=10,row=1, sticky=tk.W)
        self.logArea.insert('1.0', 'test insertion')

root = tk.Tk()
app = Application(root)
app.mainloop()

【讨论】:

  • 抱歉,您到底做了什么更改?我看到 self.grid() 未注释。你还有什么改变吗?因为当我在 ScrolledText 的声明中使用 self 而不是 self.master 时,它仍然没有显示。
  • 修改是我所说的:添加class 语句,取消注释self.grid,注释state=disabled 并插入测试文本,以便文本框可见。 (相当于 Oakley 对红色背景的建议。)放置在框架或其子类中的任何东西的主人应该是框架,而不是框架的主人。所以tkst.ScrolledText(self, 是正确的。在它正确运行后,我从 IDLE 编辑器(3.5.1,Win 10)复制了它,并显示了'test insertion',我可以从键盘在文本框中输入更多内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多