问题标签 [mainloop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - wxPython MainLoop() 崩溃
有时,当我运行项目时,我的 MainLoop 崩溃并且我得到一个退出代码。我不知道如何调试代码并查看导致它崩溃的行在哪里。我的项目很长,有很多类,所以我不能把它复制到这里。如何找到这条线?
event-handling - 一个平台的 UI 框架是否为你提供了主循环的行话?
在我上大学的时候,我记得我的一本教科书有专门的术语来区分这两种不同的 API 范例,但是,就我的一生而言,我不记得它在哪本书中,而谷歌也没有帮助。
像 Win32、Xlib 和 SDL 这样的 API,您位于调用堆栈的顶部,必须编写自己的主循环并负责使用
GetMessage
、XNextEvent
或SDL_PollEvent
.(这种设计需要更多技巧,但可以最大限度地控制编写游戏引擎或需要在 Win32 的 Win16 祖先设计的 80286 CPU 上运行的资源受限应用程序。)
像 Qt、GTK、wxWidgets、Fltk、Swing、Tk 等 API,您可以在其中执行一些初始化、连接事件处理程序,并且框架为您提供事件循环,方法是生成后台线程或要求您明确地将控制权转移到框架。(例如
QApplication.exec()
,gtk_main()
,IMPLEMENT_APP(wxAppSubclass)
,Fl::run()
等)
有谁知道我很难记住哪两个术语?
请记住,这不是即时模式与保留模式。可能有一个保留模式应用程序,您仍然必须自己泵送事件循环,或者有一个即时模式应用程序,您可以在从平台提供的主循环分派的回调中进行绘图。
python - 带有 Tkinter 的基本窗口,mainloop()
我对 Python 很陌生,目前正在学习如何使用 Tkinter 创建基本窗口。
Python 文档建议使用以下代码(简化):
另一方面,我看过一些关于这个主题的教程,建议使用
正确的使用方法是mainloop()
什么?如果两者都正确,最好使用什么?
python - 如何在所有小部件调整大小操作后对任务进行排队?
我想在更改其内容后查询小部件的大小。这是一个演示:
根据文档after_idle
,只有在无事可做时才应执行排队的回调:
注册一个在系统空闲时调用的回调。回调将被调用,主循环中不再有要处理的事件。
然而,callback2
显然是在调整标签大小之前执行的,因为程序的输出是这样的:
即使添加调用update_idletasks()
也不会更改此输出。仅当在和中都win.update_idletasks()
调用时,才会打印正确的尺寸。我真的不明白为什么有必要调用它两次。 callback1
callback2
问题
为什么callback2
在调整标签大小之前执行?如何确保label.winfo_width()
返回正确的尺寸?
限制
这个问题的主要目标是了解 tkinter 如何/何时执行(空闲)任务。我想了解如何正确地对任务进行排队,以便仅在 GUI 自行更新后才执行它们。我对诸如以下的解决方法并不感兴趣:
- 我宁愿避免使用
update()
,因为我不明白它如何导致竞争条件或何时可以安全使用。(在我的真实代码中,所有这些都将在事件处理程序中执行,文档明确指出应该避免这种情况。) - 我也想避免使用
<Configure>
event。这是因为可能有任意数量的小部件在改变大小,并且不能合理地期望我将事件处理程序绑定到它们的所有<Configure>
事件。在所有调整大小发生后,我真的只需要一种方法来执行回调函数。
python - 使用大量使用 tkinter python 的 MainLoop
所以我在学校做一个项目,我正在用 Tkinter 制作一个游戏(我知道我可以使用 PyGame,但我们在学校只学过 Tkinter....)我的游戏也使用套接字,你可能知道一次代码卡在接收整个程序冻结。为了解决这个问题,我所做的是大多数时候我从服务器接收一些东西,我是在一个线程中做的。但是由于没有服务器的回答我无法继续前进,所以我调用了 MainLoop,所以程序将“停止”它,一旦我从客户端获得信息,我就销毁了 MainLoop 并继续我需要的地方......我的问题是它是否可以这样做,如果没有,请帮助我以“好”的方式解决这个问题。
它看起来像这样:
python - 如何更新全局计数器
我正在尝试在 tkinter 中实现一个计数器。每当我单击任何按钮时,我都希望它+1。但是,计数器值始终保持不变。这是我的示例代码:
我实际上尝试将 Count+=1 放在很多地方,但没有一个奏效。所以我猜问题是 Count 的值会在每个循环(mainloop())中重置为 0。对tkinter不太熟悉。我最终想用这个计数器做的是每次按下按钮时更新窗口中显示的“对话”(标签和按钮)。按下不同的按钮应该会产生不同的对话(比如那种文字游戏)。谁能帮我解决这个问题?
qemu - 如何让QEMU一次只执行一条指令返回主循环?
我在QEMU源文件编译选项中添加了-fPCI,在最后的链接命令中添加了-shared,这样QEMU就变成了一个可以动态加载的共享库。从那时起,我开始尝试了解 QEMU。我使用 dlopen 动态加载 qemu 并使用 dlsym 搜索 qemu 中的函数。这是我的代码:
程序的输出如下:
我为 QEMU 的主循环建模并编写了这个 while 循环。我每次循环打印获取的数据,发现icount_raw可以表示CPU当前执行的指令数。关于其他数据,我仍然感到困惑。本程序运行时,uboot程序可以正常运行。我发现屏幕上打印数据的频率大约是每秒一次。每次 icount_raw 增加很多。当我使用gdb远程控制程序运行时,使用“si”命令时,icount_raw每次递增1,这就是我想要实现的:每次QEMU只执行一条指令,就可以返回主循环. 我想知道如何修改QEMU的代码,让QEMU每次执行一条指令时,都能返回到主循环,而不是使用gdb的“si”命令。以后想知道每次执行N条指令后如何控制QEMU返回主循环。这个N我可以自由设置。我了解QEMU的事件循环是基于Glib的,我想我的问题可能需要修改QEMU中调用Glib的代码。
python - 使用 Python 和 Tkinter,我将如何在 .mainloop() 的每个循环中运行代码?
我有一个程序,每次 mainloop() 循环时我都需要移动一个图像对象。我没有尝试做太多,主要是因为我不知道从哪里开始。我制作了一个模拟我遇到的问题的项目的虚拟版本。
总结一下我的问题,我需要运行 mainloop,就好像它不是阻塞函数一样。相反,要么异步运行它,要么暂停它然后运行该函数,尽管我认为这是不可能的。
有什么帮助谢谢
multithreading - 将每个 GStremer 管道运行到一个单独的 (GLib) 线程中
所有 GStremer 样本都通过以下某种形式初始化 GLib 主线程:
据我了解,这个主循环用于所有信号处理。总线消息也在其中处理。
所以我有点担心如果我同时运行多个管道会发生什么。或者其中一些存在问题/不正确的实现。
对于重负载,最好的解决方案很可能是将管道分离到多个进程,从而减轻内存泄漏、挂起、死锁等所有可能的问题,而不会影响主应用程序。
无论如何,至少将它们运行到单独的线程中是有益的。
显然,可以启动多个 GLib 主线程,首先创建 GMainContext。但我无法理解(显然我缺少知识)之后如何将它们“分配”给管道或向它们发出信号等。例如在“g_signal_connect”和“g_signal_emit”中没有指定哪个“主”线程是执行。
这里的一些帖子声称这是可能的(GStreamer 支持不同的主线程),但我无法找到详细信息。
在这个线程中讨论了类似的问题,但老实说我无法理解它。
在这篇StackOverflow 帖子中讨论了如何将超时附加到不同的 GLib 主线程。我想可以为 GStreamer 管道和对象制作类似的东西,但我不确定。
有人可以启发我一点吗?
python - pyautogui 和 tkinter 中的确认和主循环
我正在寻找可以在 Tkinter 小部件中使用 x 值的方法。我无法从网上找到合适的答案。任何建议表示赞赏。谢谢
关于,确认,它返回 x 并且 print(x) 有效。
如果我在 root.mainloop() 上方添加 print(x),Python 会抛出一个错误,说名称“x”虽然是全局的,但没有定义。如果我在 root.mainloop() 下添加 print(x),它就可以工作。
但是,我想在 tkinter 小部件中使用 x 值(Z2 037 或 Z2 039)。有没有办法做到这一点?