我有一个应用程序,该应用程序在单击按钮时会调用另一个脚本。在该脚本上,我有一些想要在应用程序的wx.TextCtrl小部件上显示的打印件,但是我不知道从哪里开始。
这是脚本的示例:
#export.py
def exportData():
#some code
#Some prints that I would like to display on the application
这是我从应用程序中调用脚本的方式:
def loadData(self, event):
from export import exportData
exportData()
我有一些问题:
如果您需要更多信息,请不要犹豫。预先感谢您的帮助。
编辑
这是我要执行的操作的极简示例代码。在main.py TextCtrl中打印“这是我的日志”。
# main.py
import wx, sys
import export
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)
log = wx.TextCtrl(panel, style=wx.TE_MULTILINE|wx.TE_READONLY)
button = wx.Button(panel, label="Export", pos=(80, 80), size=(120, 30))
self.Bind(wx.EVT_BUTTON, self.export, button)
mySizer = wx.BoxSizer(wx.VERTICAL)
mySizer.Add(button, 0, wx.ALL | wx.ALIGN_CENTER, 5)
mySizer.Add(log, 0, wx.ALL | wx.ALIGN_CENTER, 5)
panel.SetSizer(mySizer)
def export(self, event):
from export import exportData
exportData()
if __name__ == '__main__':
app = wx.App()
frame = Test(parent=None, id=1)
frame.Show()
app.MainLoop()
和导出文件:
#export.py
def exportData():
print("This is my log")
答案 0 :(得分:1)
您可以将“ Log”创建为TextCtrl。
self.log = wx.TextCtrl(Panel, style=wx.TE_MULTILINE|wx.TE_READONLY)
如果您想添加一些内容,可以这样写:
self.log.AppendText('Your String here')
要清除它,您可以这样做:
self.log.Clear()
要更详细,我们需要查看更多代码。但这也许会对您有所帮助。
我也将导入而不是函数内部的模块顶部。
from export import exportData
def loadData(self, event):
exportData(yourLogData)
我不知道您的日志信息从何而来,但我认为您需要像这样将其传递给exportData:
[...]
self.log = wx.TextCtrl(Panel, style=wx.TE_MULTILINE|wx.TE_READONLY)
[...]
def exportData(self, yourLogData):
#some code
#Some prints that I would like to display on the application
self.log.AppendText(yourLogData)
答案 1 :(得分:1)
首先,恭喜您对下面的语句import export
进行了工程设计,这使我每次看到它都感到微笑。
您是否正在尝试这样的事情?
这是您修改后的代码:
# main.py
import wx, sys
from export import exportData
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)
self.log = wx.TextCtrl(panel, style=wx.TE_MULTILINE|wx.TE_READONLY, size=(180,100))
button = wx.Button(panel, label="Export")
self.Bind(wx.EVT_BUTTON, self.export, button)
mySizer = wx.BoxSizer(wx.VERTICAL)
mySizer.Add(button, 0, wx.ALL | wx.ALIGN_CENTER, 5)
mySizer.Add(self.log, 0, wx.ALL | wx.ALIGN_CENTER, 5)
panel.SetSizer(mySizer)
def export(self, event):
exportData(parent=self)
if __name__ == '__main__':
app = wx.App()
frame = Test(parent=None, id=1)
frame.Show()
app.MainLoop()
和export.py
import time
import wx
def exportData(parent=None):
if not parent:
return
log = []
print("This is my log")
parent.log.write("This is my log\n")
#solely for the purpose of illustrating updates in real time use sleep between updates
# and yield to the gui main loop
# in real time operation remove the sleep commands
wx.Yield()
time.sleep(1)
print("Log line 2")
parent.log.write("Log line 2\n")
wx.Yield()
time.sleep(1)
print("Log line 3")
parent.log.write("Log line 3\n")
wx.Yield()
time.sleep(1)
print("Export data has concluded")
这里发生的所有事情就是我们将parent
传递给该函数,该函数允许实时进行更新。对Yield
的调用会暂时将控制权传回wx.App.MainLoop
,以使更新可见,否则,尽管更新已发生,但直到MainLoop
收回后,结果还是看不到控制。