我可以使用以下代码轻松定义我的问题:
self.Bind(wx.EVT_MENU_OPEN, self.OnAbout)
Run Code Online (Sandbox Code Playgroud)
这意味着当我点击MenuBar中的任何wx.Menu()时,会调用函数'onAbout()'.如何将此事件绑定到名为wx.MenuAbout()的特定wx.Menu()?
如果您感觉更有帮助,也许您可以向我提供事件处理程序文档的链接.我可以找到事件处理函数的文档,但不能找到实际的事件处理程序(例如wx.EVT_MENU).
类似的问题,但我不打算将一系列wx.Menu()绑定到事件:是否可以将事件绑定到菜单而不是wxPython中的菜单项?
编辑:理想情况下,这是我希望能够做到的:
menuAbout = wx.Menu()
self.Bind(wx.EVT_MENU, self.OnAbout, id=menuAbout.GetId())
Run Code Online (Sandbox Code Playgroud)
结果是.menuBar()中的任何其他项(例如:File,Edit,Tools)都可以作为普通菜单使用,但"About"的工作方式类似于可点击链接.
使用wx.EVT_MENU_OPEN意味着可以打开文件菜单,然后当鼠标悬停在'about'上时,会调用self.OnAbout函数,我只会在用户单击"关于"菜单时发生这种情况.
好吧,我是python(并编程本身)的新手,对我的无知感到抱歉,但我真的需要问这个问题.所以我正在做一个wxPython项目,我为笔记本添加了几个选项卡(笔记本的每个选项卡=一个类),并且有一个选项卡,我添加了一个复选框(在选项卡中,我们称之为Tab1),以及我想要的是,当有人检查它时,存在于其他选项卡中的按钮(例如,名为tab2的类)将被隐藏在之前显示的位置.
好吧,我看到实现这一点并不难,但我的问题是类(在本例中为tab1和tab2).我一直试图通过搜索来弄明白,但我想我的搜索力度不够,因为我无法做到正确.如果他们在同一个班级我就不会有问题,但由于他们在不同的班级,我正在与此进行巨大的斗争.
希望有人可以帮助我,并再次为我的无知感到抱歉.
编辑:抱歉,人们没有被显示/隐藏,而是被启用/禁用.
class Tab2(wx.Panel):
def __init__(self, parent):
.....
self.jaddbutton = wx.Button(self,-1, label ="Button", size = (160,24))
self.jaddbutton.Bind(wx.EVT_BUTTON, self.jaddbuttonclick, self.jaddbutton)
def jaddbuttonclick(self, event):
....
class Tab1(wx.Panel):
def __init__(self, parent):
self.jdcheck = wx.CheckBox(self, -1, 'Disable')
self.jdcheck.Bind(wx.EVT_CHECKBOX, self.checkoptions, self.jdcheck)
def checkoptions(self,event):
checkboxval = self.jdcheck.GetValue()
if checkboxval == False:
self.jaddbutton.Disable() # This is what I want to do but it is on the other class
else:
self.jaddbutton.Enable() # Same as above
class TextFrame(wx.Frame):
def __init__(self):
p = wx.Panel(self)
self.nb = wx.Notebook(p, size …Run Code Online (Sandbox Code Playgroud) 使用wxPython,每当整个窗口进入/失去焦点时,如何触发一个事件?
详细地说,我正在构建一个串行终端GUI,并希望在用户未选择我的应用程序时就关闭连接,并在用户使我的应用程序回到前台时重新打开该连接。我的应用程序只是一个从wx.Frame派生的窗口。
我有一个对象实例列表(wxPython小部件).我希望能够判断列表中的实例是否已被销毁.怎么会这样呢?
我有一个wx框架,我有很多复选框.用户经常在下拉菜单(wx.ComboBox)中更改设置时,我想清除所有复选框.目前,我已经实现了一个方法,当ComboBox发生更改时会调用它并手动清除每个复选框,即:
def ClearCheckBoxes(self):
self.cb_EnableControl.SetValue(0)
self.cb_EnableRun.SetValue(0)
self.cb_EnablePower.SetValue(0)
...
...
Run Code Online (Sandbox Code Playgroud)
虽然我只有大约10个,但如果是这样的话,我的ClearCheckBoxes方法会更清晰:
def ClearCheckBoxes(self):
for CheckBox in self.AllCheckBoxes:
CheckBox.SetValue(0)
Run Code Online (Sandbox Code Playgroud)
另外,我想我可以创建一个列表(即AllCheckBoxes)和所有复选框添加到列表中,我创建它们,那就只能通过列表迭代的问题.但这里的重点是,我想知道是否有预定义的方法来做到这一点.
谢谢
我如何使用Pyinstaller"编译"GUI应用程序,并且在运行可执行文件时只获取生成的GUI wxPython?目前,当我运行exe时,弹出一个cmd窗口,然后弹出wxPython窗口.我在调试时这很好,但是当我分发我的应用程序时,它不会有任何用处(可能甚至是oposite!).
如何登录文件以及wxpython txt ctrl?
背景我有基于wxpython GUI的应用程序,它枚举python测试文件并执行它们.在http://broadcoder.blogspot.com/2009/10/redirecting-python-logging-to.html的帮助下,我能够将python日志消息重定向到txtctrl.但是,我也想将日志消息重定向到日志文件.我导入我的测试文件,如下所示:
logging.info('Started')
testid = __import__(str)
reload(testid)
testOut = testid.main()
Run Code Online (Sandbox Code Playgroud)
在我的每个测试文件中,我只使用导入日志记录,我的日志消息被重定向到txt ctrl.但是,我还希望测试日志消息也可以根据文件名重定向到日志文件.如何将日志消息重定向到两者?如果我在我的测试文件中使用logging.basicConfig消息仍然仅指向文本ctrl.我在其中导入的TestGUI.py说5个python测试文件.在我的测试文件文件中,我只是在我的TestGUI.py文件中设置记录器时使用导入记录
self.logr = logging.getLogger('')
self.logr.setLevel(logging.INFO)
hdlr = WxLog(self.log)
hdlr.setFormatter(logging.Formatter('%(message)s '))
self.logr.addHandler(hdlr)
Run Code Online (Sandbox Code Playgroud)
在我的测试文件中,我做了类似这样的事情:
logger = logging.getLogger('')
fh = logging.FileHandler("log.html",mode='w')
formatter = logging.Formatter('%(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
a= 5
b= 6
logging.info('a=5')
logging.info('b=6')
c= a+b
logging.info('adding b and c')
fh.close()
Run Code Online (Sandbox Code Playgroud)
当我多次运行此测试时,我得到ValueError:关闭文件的I/O操作.
希望有人帮我安装wxPython.我有ubuntu 11.10并且没有构建包.我使用此页面(http://wxpython.org/BUILD.html)作为安装后安装的指导,我运行
>python
>>>import wx
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "wx/__init__.py", line 45, in <module>
from wx._core import *
File "wx/_core.py", line 4, in <module>
import _core_
ImportError: libwx_gtk2u_adv-2.9.so.3: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
应该怎么做才能解决它?谢谢!
我试图使用WHERE子句从变量中的PostgreSQL数据库中检索值,但我收到一个错误.
查询是:
select age into x from employee where name=name.GetValue()
Run Code Online (Sandbox Code Playgroud)
name 是我从wxpython GUI输入值的textcontrol.
我收到错误,因为名称架构不存在.
检索值的正确方法是什么?
我有以下代码,我正在按照教程:
(http://zetcode.com/wxpython/layout/ - GoToClass部分)
我无法弄清楚它有什么问题......:/
正如您在教程中看到的,它应该产生这样:
代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# gotoclass.py
import wx
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(390, 350))
self.InitUI()
self.Centre()
self.Show()
def InitUI(self):
panel = wx.Panel(self)
font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
font.SetPointSize(9)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
st1 = wx.StaticText(panel, label='Class Name')
st1.SetFont(font)
hbox1.Add(st1, flag=wx.RIGHT, border=8)
tc = wx.TextCtrl(panel)
hbox1.Add(tc, proportion=1)
vbox.Add(hbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)
vbox.Add((-1, 10))
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
st2 = wx.StaticText(panel, label='Matching Classes')
st2.SetFont(font)
hbox2.Add(st2)
vbox.Add(hbox2, flag=wx.LEFT | wx.TOP, …Run Code Online (Sandbox Code Playgroud) wxpython ×10
python ×8
wxwidgets ×2
class ×1
cmd ×1
installation ×1
instance ×1
list ×1
logging ×1
postgresql ×1
pyinstaller ×1
ubuntu ×1