链接按钮以打开其他 py 文件的正确方法是什么?



我有一个很大的疑问,因为我的脚本没有达到应有的状态。所以我有一个简单的主文件,带有一个打开空白网格的按钮(下面的代码)。此代码的问题在于它在第一次执行时打开 reportWindow,但是如果我关闭报告并尝试再次打开它,则会收到错误: 名称错误:未定义名称"测试帧">

我还从 reportWindow.py 的最后一行中删除了if __name__ == '__main__',因为脚本无法使用它。我尝试了if __name__ == 'main'因为它是从 main.py 导入的,但它也没有用。

拜托,有人可以告诉我应该如何以正确的方式完成吗?

谢谢

main.py

import wx
class Test(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id, "Frame aka Window", size=(300, 200))
panel = wx.Panel(self)
button = wx.Button(panel, label = "Exit", pos=(80, 80), size = (120,30))
self.Bind(wx.EVT_BUTTON, self.closebutton, button)
def closebutton(self,event):
from reportWindow import SimpleGrid
SimpleGrid(TestFrame, -1)
if __name__ == '__main__':
app = wx.App()  
frame = Test(parent=None, id=1)
frame.Show()
app.MainLoop()

reportWindow.py

import wx
import wx.grid as gridlib
class SimpleGrid(gridlib.Grid): ##, mixins.GridAutoEditMixin):
def __init__(self, parent, log):
gridlib.Grid.__init__(self, parent, -1)
#[...Some code...]

class TestFrame(wx.Frame):
def __init__(self, parent, log):
wx.Frame.__init__(self, parent, 0, "Title", size=(1400,800))
self.grid = SimpleGrid(self, log)
#[...Some code...]

#if __name__ == '__main__':
import sys
from wx.lib.mixins.inspection import InspectableApp
app = InspectableApp(False)
frame = TestFrame(None, sys.stdout)
frame.Show(True)
#import wx.lib.inspection
#wx.lib.inspection.InspectionTool().Show()
app.MainLoop()

您的代码存在一些问题。

1)发生NameError是因为您没有从reportWindow导入TestFrame

2)如果没有if __name__ == "__main__"reportWindow.py您的程序将创建另一个wx.App并启动另一个MainLoop这将阻止第一个循环接收事件等...您应该只创建 1 个App/MainLoop。 它还将在您首次导入reportWindow时创建TestFrame

3)看起来你想让SimpleGrid成为TestFrame的孩子,但随后你试图在closebutton中自己创建它。

4)创建SimpleGrid时,传递TestFrame类而不是TestFrame类的实例。

这是修改后的代码

# main.py
import wx, sys

class Test(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, "Frame aka Window", size=(300, 200))
panel = wx.Panel(self)
button = wx.Button(panel, label="Exit", pos=(80, 80), size=(120, 30))
self.Bind(wx.EVT_BUTTON, self.closebutton, button)
def closebutton(self, event):
from reportWindow import TestFrame
frame = TestFrame(self, sys.stdout)
frame.Show()

if __name__ == '__main__':
app = wx.App()
frame = Test(parent=None, id=1)
frame.Show()
app.MainLoop()

# reportWindow.py
import wx
import wx.grid as gridlib

class SimpleGrid(gridlib.Grid):  ##, mixins.GridAutoEditMixin):
def __init__(self, parent, log):
gridlib.Grid.__init__(self, parent, -1)
# [...Some code...]

class TestFrame(wx.Frame):
def __init__(self, parent, log):
wx.Frame.__init__(self, parent, 0, "Title", size=(1400, 800))
self.grid = SimpleGrid(self, log)
# [...Some code...]

if __name__ == '__main__':
import sys
from wx.lib.mixins.inspection import InspectableApp
app = InspectableApp(False)
frame = TestFrame(None, sys.stdout)
frame.Show(True)
import wx.lib.inspection
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()

相关内容

最新更新