我刚下载了wxPython,并从这里运行了一些示例程序.但是,在使用wx.*变量的每一行上,我得到一个"导入错误的未定义变量"
例如,以下程序在第1,4,8行产生五个错误,在第5行产生两个错误:
import wx
class MyFrame(wx.Frame):
""" We simply derive a new class of Frame. """
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.Show(True)
app = wx.App(False)
frame = MyFrame(None, 'Small editor')
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
然而,该程序编译和运行完美.我没有对pydev或eclipse做过任何重大修改,而且wxPython安装很新鲜.
我想用Python开发一个非常简单的2D游戏.Pygame是Python中最受欢迎的游戏开发库,但我已经非常熟悉wxPython并且使用起来很舒服.我甚至在其中写了一个俄罗斯方块克隆,它非常流畅.
我想知道,Pygame在图形方面提供了什么(暂时放弃声音)wxPython不能做什么?在Pygame中制作图形比在wxPython中更简单/更快吗?它是否更加跨平台?
看起来我在这里遗漏了一些东西,但我不知道是什么.
我没有找到更好的方法来改变wx.ComboBox()中的不同选择,而不是将旧的ComboBox与新的交换.有没有更好的办法?
Oerjan Pettersen
#!/usr/bin/python
#20_combobox.py
import wx
import wx.lib.inspection
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.p1 = wx.Panel(self)
lst = ['1','2','3']
self.st = wx.ComboBox(self.p1, -1, choices = lst, style=wx.TE_PROCESS_ENTER)
self.st.Bind(wx.EVT_COMBOBOX, self.text_return)
def text_return(self, event):
lst = ['3','4']
self.st = wx.ComboBox(self.p1, -1, choices = lst, style=wx.TE_PROCESS_ENTER)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '20_combobox.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
# wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud) 我可以将事件绑定到textctrl框np.问题是我必须在textctrl框内单击以"捕获"此事件.我希望能够在主窗口具有焦点时随时按下箭头键.
不工作:
wx.EVT_KEY_DOWN(self, self.OnKeyDown)
Run Code Online (Sandbox Code Playgroud)
工作方式:
self.NudgeTxt = wx.TextCtrl(self.panel, size=(40,20), value=str(5))
wx.EVT_KEY_DOWN(self.NudgeTxt, self.OnKeyDown)
Run Code Online (Sandbox Code Playgroud)
我很确定我错过了一些简单的事情.但是我有点卡住了.
我正在整理一些程序,现在是开始为其中一些程序制作GUI的时候了.该代码目前是用Python 3.3编写的.
我研究了一些Python的GUI,即Tkinter,wxPython和PyGTK.我发现的一切似乎只是创建看起来相当陈旧的GUI.我已经创建了几个示例GUI,它们都可以工作,它们看起来非常像Windows 95.
我发现/创建的一个例子: 
我想要的一个例子是: 
它只是一个关于GUI如何工作的高级知识,还是只有更适合"现代"外观GUI的GUI模块?
如果它是关于GUI如何工作的高级知识,是否有一些关于如何使GUI看起来更"现代"的教程.
提前致谢.
我在wxPython中编写了一个小应用程序,它有一个matplotlib图(使用wxagg后端)面板.我想为用户添加将当前在图中绘制的X,Y数据导出到文本文件的能力.有没有非侵入性的方法来做到这一点?我搜索了很多,似乎找不到任何东西,虽然我觉得它非常简单,就在我面前.
我可以肯定地获取数据并将其存储在绘制时的某个位置,并使用它 - 但这将是相当侵入性的,进入我的代码的较低级别.如果我能做一些像以下那样简单的事情,那将会更容易,更普遍:
x = FigurePanel.axes.GetXData()
y = FigurePanel.axes.GetYData()
Run Code Online (Sandbox Code Playgroud)
希望这有点意义:)
非常感谢!任何帮助是极大的赞赏!
编辑:澄清,我想知道怎么做是获取X,Y数据.之后写入文本文件是微不足道的;)
我无法理解如何刷新FigureCanvasWxAgg实例.这是一个例子:
import wx
import matplotlib
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.NewId(), "Main")
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.figure = Figure(figsize=(1,2))
self.axe = self.figure.add_subplot(111)
self.figurecanvas = FigureCanvas(self, -1, self.figure)
self.buttonPlot = wx.Button(self, wx.NewId(), "Plot")
self.buttonClear = wx.Button(self, wx.NewId(), "Clear")
self.sizer.Add(self.figurecanvas, proportion=1, border=5, flag=wx.ALL | wx.EXPAND)
self.sizer.Add(self.buttonPlot, proportion=0, border=2, flag=wx.ALL)
self.sizer.Add(self.buttonClear, proportion=0, border=2, flag=wx.ALL)
self.SetSizer(self.sizer)
self.figurecanvas.Bind(wx.EVT_LEFT_DCLICK, self.on_dclick)
self.buttonPlot.Bind(wx.EVT_BUTTON, self.on_button_plot)
self.buttonClear.Bind(wx.EVT_BUTTON, self.on_button_clear)
self.subframe_opened = False
def on_dclick(self, evt):
self.subframe = SubFrame(self, self.figure)
self.subframe.Show(True)
self.subframe_opened …Run Code Online (Sandbox Code Playgroud) 我正在使用wxPython(wxAUI)编写一个小型报告应用程序.我想将我的数据呈现为HTML,以便在WebView'小部件'中显示.我正在寻找一个样本'hello world'代码片段,它将展示如何在WebView小部件中显示/呈现HTML字符串 - 但是无法找到一个示例 - 并且WebView小部件似乎没有很好地记录.
有人可以提供这样一个例子的链接或(更好的是),在这里发布一个简短的片段,显示如何使用WebView小部件呈现HTML字符串?
# sample html string to display in WebView widget
html_string = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Hello World!</title>
<script type="text/javascript" src="jquery.js"></script>
<style type="text/css" src="main.css"></style>
</head>
<body>
<span id="foo">The quick brown fox jumped over the lazy dog</span>
<script type="text/javascript">
$(document.ready(function(){
$("span#foo").click(function(){ alert('I was clicked!'); });
});
</script>
</body>
</html>
"""
Run Code Online (Sandbox Code Playgroud) 当我单击主框架的关闭按钮时,应用程序应该关闭.但是我实现它的方式,Segmentation fault当我点击按钮时,它会退出.
我担心安全关闭程序,因为我需要稍后将内容保存到磁盘.
通过关闭按钮终止WxPython应用程序的正确非暴力方法是什么?
这是我实现的程序的"主要"循环:
if __name__ == "__main__":
app = wx.App(False)
mf = MainFrame(None, title='Spectrum Checker') #subclasses frame
mf.register_close_callback( app.Destroy) #what is the apt func?
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
以下是如何在以下内容中实现回调MainFrame:
def __init__(self, parent, title):
...
self.Bind(wx.EVT_CLOSE, self._when_closed)
...
def _when_closed(self, event):
if self.__close_callback__:
self.__close_callback__()
Run Code Online (Sandbox Code Playgroud) 我和朋友正在玩游戏.我们希望将一个pygame窗口嵌入到tkinter或WxPython框架中,以便我们可以包含WX或Tkinter支持的文本输入,按钮和下拉菜单.我已经在互联网上搜索了答案,但我发现所有人都在问同样的问题,这些都没有得到很好的回答.
实现嵌入到tkinter或WX帧中的pygame显示的最佳方法是什么?(TKinter更好)
将这些功能与pygame显示一起包含的任何其他方式也可以.