【问题标题】:Python tkinter window display messagePython tkinter 窗口显示消息
【发布时间】:2021-04-26 03:32:35
【问题描述】:

我编写了以下代码,用于在 GUI 窗口上显示一些内容。我从中删除的一些代码在这里不需要。 _print(text) 函数用于在 gui 屏幕上打印内容。谁能告诉我如何使这个函数全局可访问,以便同一类的其他函数中的 _print 语句也可以在 GUI 上更新。

我无法将此 _print 函数移到 GUI() 函数之外。
基本上我需要将我所有的打印语句推送到 tkinter 上。我该怎么做?

   def accept_client_connections(master=None):
      try:
         while True:
            # some code
        _print("This statement needs to be printed on tkinter")


    def GUI():
    ***def _print(text):
        tex.insert(END, text + '\n')
        tex.see("end")***   

    window = Tk()
    #some code

    tex = Text(window,width=80, height=40, font=('arial',10,'bold'), wrap=WORD)
    tex.pack(side=TOP, fill=X,padx=10,pady=5)
    
    messagebox.showinfo("","Waiting")
    _print('xvdgfd...')



if __name__ == "__main__": 
  

【问题讨论】:

  • 我认为这个 [post] 应该可以解决您的问题。 [1]stackoverflow.com/questions/17395338/….
  • “我不能将这个 _print 函数移到 GUI() 函数之外。” - 你为什么不能呢?当你这样做时会发生什么?
  • @BryanOakley _print() 中的内容只能在调用 GUI 后打印。 tex 在创建 tkinter 窗口时被调用。即使我尝试在外面使用它,它也会给出 tex 是未定义变量的编译错误
  • 你研究过类和 OOP。
  • @CoolCloud 是的课程确实帮助我解决了这个问题。非常感谢……

标签: python python-3.x tkinter


【解决方案1】:

我认为你不能这样做,因为嵌套函数具有本地范围,它们被用作辅助函数。 相反,您可以将文本参数传递给外部函数,然后在内部函数中使用它,这就是您的代码的样子。

def GUI(text):
    def _print():
        tex.insert(END, text + '\n')
        tex.see("end")
    _print()

# then call GUI function not _print
GUI('this is a text...')
window.mainloop()

【讨论】:

    【解决方案2】:

    这可能不是最好的解决方案,但这是我想出来的。

    我已经能够通过使用类来解决这个问题。这两个函数都包含在类中,并且在 GUI() 下使用全局变量有助于使 tex 变量全局可访问。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      def GUI():
          def _print(text):
              tex.insert(END, text + '\n')
              tex.see("end")
          return _print
      # some code here...
      _print = GUI()
      _print("1234567890")
      

      【讨论】:

      • 我可以在 Tkinter 上打印 GUI() 中的语句。但是在另一个函数中的语句,我无法打印它们。我已经编辑了我的问题以便更好地理解
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2018-01-08
      相关资源
      最近更新 更多