当从全局实例请求中请求类方法时,Python 消息框不更新。我在这里缺少什么?

迈克尔
import tkinter as TK
from tkinter import *
from tkinter import ttk

############################################
root = TK.Tk()
root.geometry("1000x700+1+5")
WindowTitle = 'Test MessageBox'
Revision = 'Support 1.0';

gServerData = 'Let there be Rock'


# COMMAND/Communication Message Window Test Button #############
def ButtonTest():
    global gServerData
    #gServerData = '128,TestingMojo'
    print('* ButtonTest Function: Ready to Print in MessageBox',gServerData)
    Api.PrintMessage()

# TABS Notebook page Setup 
class API_Tabs(TK.Frame):

    def __init__(self,*args,**kwargs):
        Frame.__init__(self,*args,**kwargs)
        self.notebook = ttk.Notebook()
        self.Tabs()
        self.notebook.place(x=5, y = 1, height=690, width =990)
        self.master.title(WindowTitle)
        #self.MessageHistoryText = MessageHistoryText

    #Setup ttk Notebook style 
    def Tabs(self):
        page1 = Api_Select(self.notebook)
        page2 = Api_Operations(self.notebook) 

        self.notebook.add(page1,text="Main")
        self.notebook.add(page2,text="Operation")   

############################################    
class Api_Select(Frame):
    def __init__(self,name,*args,**kwargs):
        Frame.__init__(self,*args,**kwargs)
        self.name = name


class Api_Operations(Frame):
    def __init__(self,name,*args,**kwargs):
        Frame.__init__(self,*args,**kwargs)
        self.name = name
        self.createWidgets()
        self.PrintMessage()

    def PrintMessage(self):
        global gServerData
        print('* Print Message Function: Message Ready',gServerData)
        self.MessageHistoryText.delete('1.0',END)
        self.MessageHistoryText.insert(TK.END, 'GlobalServer:' + gServerData + '\n', 'notice')
        self.MessageHistoryText.see(TK.END)
        self.MessageHistoryText.update()
        root.update()
        print('* Print Message Function: MessageBox Update',gServerData)

    def createWidgets(self):
        self.mainFrame = Frame(self) #TK.Frame(self)
        self.mainFrame.place(x=0, y = 0, height=650, width = 1000)

        self.ButtonTestPB = TK.Button(self.mainFrame, text='TEST', command= ButtonTest)
        self.ButtonTestPB.place(x=50, y = 100, height=50, width = 50)

        # COMMAND/Communication Entry Window and Send Button #############
        self.MessageFrame = TK.Frame(self.mainFrame)
        self.MessageFrame.place(x=240, y = 50, height=370, width = 360)
        self.MessageCmdLabel = TK.Label(self.MessageFrame, text= 'Command/Communications',anchor="w" )
        self.MessageCmdLabel.place(x=0, y = 0, height=25, width = 200)
        self.MessageHistoryText = TK.Text(self.MessageFrame, height=20, width=40, relief=TK.SUNKEN)
        self.MessageHistoryScroll = TK.Scrollbar(self.MessageFrame)     
        self.MessageHistoryText.config(yscrollcommand=self.MessageHistoryScroll.set)
        self.MessageHistoryScroll.config(command=self.MessageHistoryText.yview)
        self.MessageHistoryText.place(x=0, y = 25, height=300, width = 350)
        self.MessageHistoryScroll.place(x=350, y = 25, height=300, width = 15)      
        self.MessageHistoryText.tag_configure('warning', foreground='red', background='gainsboro')
        self.MessageHistoryText.tag_configure('notice', foreground='blue', background='gainsboro')  

App = API_Tabs(root)
Api = Api_Operations(App)
#_thread.start_new_thread(Receive, ("Receive_Thread",))
App.mainloop()
root.destroy()  

''' 使用 ops 页面上的 Button 应该给我与消息框中的 statup 文本相同的结果。这是一个非常大的 GUI 的小例子。我有一个线程正在运行,它在接收到数据时调用一个全局函数。这一切都有效。我需要做的是将接收到的数据打印到我的操作页面消息框而不需要它。测试按钮是模仿请求。

但它不起作用。有什么想法吗?'''

诺斯洛

我运行你的代码,点击按钮,看到了print()s,所以我不知道哪里出了问题。您的问题是“但它不起作用”,但并没有准确描述它是如何失败的。提供的示例似乎工作正常并且没有重现问题?

避免使用线程 - 你不需要线程从网络接收某些东西,你可以使用 tkinter 的低级createfilehandler来创建一个事件,当某些东西可以在套接字中读取时将被调用,而不会冻结 gui 并且没有线程. 或者如果您更喜欢更高级别(推荐)您可以使用异步框架通信协议!

编辑:从评论中我终于可以看到您的问题是什么:您有两个Api_Operationsclass实例

其中之一被实例化并存储为名为 的全局变量Api

Api = Api_Operations(App)

另一个是在API_Tabs内部的Tabs()方法中创建的,并存储为名为 的局部变量page2

page2 = Api_Operations(self.notebook) 

由于您正在显示page2但正在更新Api,更新永远不会显示,因为您正在更新的实例不是屏幕中显示的实例。

要修复它,请将您创建的实例存储API_Tabs.Tabs()为属性:

def Tabs(self):
    page1 = Api_Select(self.notebook)
    self.Api = Api_Operations(self.notebook) 

    self.notebook.add(page1,text="Main")
    self.notebook.add(self.Api, text="Operation")

然后在您的ButtonTest()函数中,您可以使用API_Tabs存储在全局名称中实例访问它App

App.Api.PrintMessage()

你可以删除你的Api = Api_Operations(App)线。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

字段列表中的“ loginAttempts”列不明确-我在这里缺少什么区别?

来自分类Dev

我在这里做错了什么?~~ Python中的Tkinter

来自分类Dev

我的 QList 类列表在这里存储了什么

来自分类Dev

Python 3:我在这里做错了什么?

来自分类Dev

Python3-我在这里做错了什么?

来自分类Dev

Python3-我在这里做错了什么?

来自分类Dev

c中的链表(我在这里做错了什么?)

来自分类Dev

使用postgres_fdw更新远程数据库中的表时,我在这里做什么?

来自分类Dev

getBean()方法在这里做什么?

来自分类Dev

为什么python在这里运行?

来自分类Dev

为什么python在这里运行?

来自分类Dev

Python:%s 在这里做什么?

来自分类Dev

在这里,我向控制器发送了一条消息,该消息在Internet Explorer中可以正常工作,但chrome无法正常工作,为什么?

来自分类Dev

我在这里缺少什么权限?

来自分类Dev

我在这里不了解操作:对于索引,枚举(选择)中的项目:

来自分类Dev

在这里我想在文本框中添加按钮值

来自分类Dev

自我加入在这里无济于事。我还可以使用其他什么方法?

来自分类Dev

为什么我在这里不能通过引用传递类对象?

来自分类Dev

将JavaScript函数用作“类”:在这里我做错了什么?

来自分类Dev

为什么我在这里不能通过引用传递类对象?

来自分类Dev

if语句中的JavaScript代码的一部分运行,而同一块中的其余代码不执行。我在这里想念什么?

来自分类Dev

if语句中的JavaScript代码的一部分运行,而同一块中的其余代码不执行。我在这里想念什么?

来自分类Dev

当我仅访问数组时,为什么在这里得到NaN?

来自分类Dev

在检查不存在的xml节点时,我在这里做错了什么?

来自分类Dev

尝试将 nlmrt 对象转换为 nls 对象时我在这里做错了什么

来自分类Dev

有人可以告诉我python在这里做什么吗?

来自分类Dev

docker-compose:为什么在这里调用我的 python 应用程序?

来自分类Dev

在Scala中,为什么在这里我可以使用`Unit`作为返回类型?

来自分类Dev

为什么我不能在库中“在这里打开命令窗口”?

Related 相关文章

  1. 1

    字段列表中的“ loginAttempts”列不明确-我在这里缺少什么区别?

  2. 2

    我在这里做错了什么?~~ Python中的Tkinter

  3. 3

    我的 QList 类列表在这里存储了什么

  4. 4

    Python 3:我在这里做错了什么?

  5. 5

    Python3-我在这里做错了什么?

  6. 6

    Python3-我在这里做错了什么?

  7. 7

    c中的链表(我在这里做错了什么?)

  8. 8

    使用postgres_fdw更新远程数据库中的表时,我在这里做什么?

  9. 9

    getBean()方法在这里做什么?

  10. 10

    为什么python在这里运行?

  11. 11

    为什么python在这里运行?

  12. 12

    Python:%s 在这里做什么?

  13. 13

    在这里,我向控制器发送了一条消息,该消息在Internet Explorer中可以正常工作,但chrome无法正常工作,为什么?

  14. 14

    我在这里缺少什么权限?

  15. 15

    我在这里不了解操作:对于索引,枚举(选择)中的项目:

  16. 16

    在这里我想在文本框中添加按钮值

  17. 17

    自我加入在这里无济于事。我还可以使用其他什么方法?

  18. 18

    为什么我在这里不能通过引用传递类对象?

  19. 19

    将JavaScript函数用作“类”:在这里我做错了什么?

  20. 20

    为什么我在这里不能通过引用传递类对象?

  21. 21

    if语句中的JavaScript代码的一部分运行,而同一块中的其余代码不执行。我在这里想念什么?

  22. 22

    if语句中的JavaScript代码的一部分运行,而同一块中的其余代码不执行。我在这里想念什么?

  23. 23

    当我仅访问数组时,为什么在这里得到NaN?

  24. 24

    在检查不存在的xml节点时,我在这里做错了什么?

  25. 25

    尝试将 nlmrt 对象转换为 nls 对象时我在这里做错了什么

  26. 26

    有人可以告诉我python在这里做什么吗?

  27. 27

    docker-compose:为什么在这里调用我的 python 应用程序?

  28. 28

    在Scala中,为什么在这里我可以使用`Unit`作为返回类型?

  29. 29

    为什么我不能在库中“在这里打开命令窗口”?

热门标签

归档