我在使用phyton 2.7进行abaqus编程时遇到了一个问题。 我正在使用Tkinter并在其上创建一个包含大量控件的窗口。 我的主要问题是在我的插件窗口打开时,用户需要点击abaqus菜单项,浏览模式等。所以当我的插件仍在屏幕上工作时使用主程序。 如果我在没有线程的情况下创建我的Tk窗口,那么当我的插件打开时用户点击abaqus主窗口函数时,abaqus将不会响应或崩溃“LoadlibraryA error 193” (例如:当插件运行并且用户点击Viewvportmenü/ ViewPort Annotation Options时,他/她将无法更改标签)
如果我在一个线程中创建了我的Tk窗口,那么Tk窗口控件只会在我用光标离开Tk窗口后响应鼠标事件。 (例如:我制作2个笔记本页面,开始后我点击未选中的页面。然后在Tk窗口内我的mous没有任何反应,但是一旦我将其移出,点击生效并且标签更改...... )
我的代码的线程版本:
导入线程
类pilotDB(threading.Thread):
def shutdown_ttk_repeat(self):
self.root.eval( ':: TTK :: CancelRepeat')
self.root.destroy()
def __init__(self):
import threading
threading.Thread.__init__(self)
def refresh(self):
self.root.after(50, self.refresh)
def tabpage(self):
import ttk
import sys
self.notebook = ttk.Notebook(self.root)
self.tabpage_tab1 = ttk.Frame(self.notebook,width=400,height=500)
self.tabpage_tab2 = ttk.Frame(self.notebook,width=400,height=500)
self.notebook.add(self.tabpage_tab1, text='Tab1')
self.notebook.add(self.tabpage_tab2, text='Tab2')
self.notebook.place(x=30, y=40)
def run(self):
import Tkinter
self.root = Tkinter.Tk()
self.root.protocol("WM_DELETE_WINDOW", self.shutdown_ttk_repeat)
self.tabpage()
self.root.after(1000, self.refresh())
self.root.mainloop()
app = pilotDB() app.start()
答案 0 :(得分:0)
app / pilotDB没有名为“start”的函数(已发布代码的最后一行)。如果我在init中调用self.run()并删除线程,那么程序按预期工作,即打开一个窗口并显示2个选项卡,用户可以在选项卡之间切换,鼠标始终在窗口中这是正常的。另请注意,refresh()函数除了重复调用自身外什么都不做。您应该首先通过注释“WM_DELETE_WINDOW”,shutdown_ttk_repeat以及执行函数tabpage()的调用来查找有问题的代码,该函数将保留一个基本窗口。然后取消注释并运行它,并重复直到找到错误。