我想限制列表控制框的大小。让我们使用以下代码:
import wx
class Students(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(380, 230))
hbox = wx.BoxSizer(wx.HORIZONTAL)
panel = wx.Panel(self, -1)
self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
self.list.InsertColumn(0, 'name')
self.list.InsertColumn(1, 'age')
hbox.Add(self.list, 1,wx.EXPAND)
panel.SetSizer(hbox)
self.Centre()
self.Show(True)
app = wx.App()
Students(None, -1, 'studs')
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
如果我将水平框大小器的比例设置为 0,如下所示:
hbox.Add(self.list, 0,wx.EXPAND)
Run Code Online (Sandbox Code Playgroud)
那么有一个不同的问题。比例= 1 的问题是在“年龄”列之后,列表控制框有很多空白空间用于第三列不存在的列。ratio=0 的问题是它的宽度太短了。我只想显示带有“名称”和“年龄”列的列表控制框并保存其余空间。我怎么做?
如何以编程方式确定特定控件(在我的情况下为 wx CheckBox)是否被禁用?我没有看到小部件具有“禁用”属性或“isDisabled”方法。
我有这个绑定“ self.Bind(wx.EVT_LISTBOX,self.selLoadFile,listbox)”。我将如何添加另一个功能,我想这就是您所称的功能。像self.selLoadFile一样,我如何向同一事件添加另一个函数?我正在制作音乐播放器,希望文件被选择后自动播放。self.selLoadFile函数加载文件,如何将“ self.Play”函数添加到同一evt?
提前致谢!!
抱歉,我是编程新手。你能帮我一点忙吗?因此,如果我的职能在哪里:
def selLoadFile(self, event):
my_selection = self.myListBox.GetStringSelection()
file_path = os.path.join(os.getcwd(),"songs",my_selection)
self.doLoadFile2(file_path)
def doLoadFile2(self, file_path):
if not self.mc.Load(file_path):
wx.MessageBox("Unable to load %s: Unsupported format?" % file_path, "ERROR", wx.ICON_ERROR | wx.OK)
else:
folder, filename = os.path.split(file_path)
self.st_file.SetLabel('%s' % filename)
self.mc.SetBestFittingSize()
self.mc.Play()
def Play(self, event):
self.mc.Play()
self.playbackSlider.SetRange(0,self.mc.Length())
Run Code Online (Sandbox Code Playgroud)
如何将上述所有三个功能合并到一个功能中?
我想知道何时调整了框架的大小,以便我可以保存大小并在下次启动应用程序时记住它。这是我的on_resize方法:
def on_resize(self, event):
logic.config_set('main_frame_size',
(event.Size.width, event.Size.height))
event.Skip()
Run Code Online (Sandbox Code Playgroud)
它是这样绑定的:
self.Bind(wx.EVT_SIZE, self.on_resize)
Run Code Online (Sandbox Code Playgroud)
问题是性能。为了安全起见,我的逻辑模块会在每次设置更改时保存配置文件,并且每次触发调整大小事件时都写入配置文件会影响性能。
当用户完成调整框架大小时,最好/最简单的监视方法是什么?
我的config_set功能:
def config_set(key, value):
"""Set a value to the config file."""
vprint(2, 'Setting config value: "{}": "{}"'.format(key, value))
config[key] = value
# Save the config file.
with open(config_file_path, 'w') as f:
pickle.dump(config, f)
Run Code Online (Sandbox Code Playgroud) 我的 Windows 8 上安装了带有 wxWidgets 2.8.11.0 的 python 2.7。如果我执行以下代码:
import wx
app = wx.App( redirect = False )
wnd = wx.Frame( parent = None )
widget = wx.ListCtrl( parent = wnd, style = wx.LC_REPORT )
widget.InsertColumn( 0, "items" )
widget.InsertStringItem( 0, "foo" )
widget.InsertStringItem( 1, "bar" )
widget.InsertStringItem( 2, "baz" )
widget.Select( 1 )
wnd.Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
我看到了一个包含 3 个项目列表的窗口,第二个被选中。但是如果我按“向下”键 -选择了第一项!是否可以选择项目,因此按“向上”和“向下”键将移动现有选择并且不会跳到第一个项目?
我正在尝试创建一个线程,并在关闭wxPython应用程序的框架时结束它.这是我的代码:
#! /usr/bin/env python
import time, wx
from threading import Thread
class UpdateThread(Thread):
def __init__(self):
self.stopped = False
Thread.__init__(self)
def run(self):
while not self.stopped:
self.updateExchange()
time.sleep(1)
def updateExchange(self):
print("Updated...")
class tradeWindow(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, "Exchange", size = (500, 190))
panel = wx.Panel(self)
def OnExit(self):
tickThread.stopped # I've also tried: tickThread.stopped = True
tickThread = UpdateThread()
tickThread.start()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = tradeWindow(parent = None, id = -1)
frame.Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
但是当我关闭框架时,它会继续打印.
我正在尝试使用计时器和函数的输出来更新一些静态文本。
代码在这里:代码。
我对 wxPython 知之甚少,这是我不明白的许多事情之一,这令人抓狂,如果我打印 apper 的输出来控制台它可以完美运行,我想要做的就是将打印出来的内容打印到控制台应用于文本。
我究竟做错了什么?
我正在编写代码(Python和wxpython for GUI),它将在Raspberry PI上的Debian OS上运行.我想保护/隐藏源代码.有什么办法吗?可能是py2exe,还是将它转换为库或其他东西?
我无法捕获 EVT_KEY_DOWN 事件。但是可以捕获EVT_KEY_UP。
Python 版本: 2.7.3
wxPython 版本: 2.8.12.1 (gtk2-unicode)
系统信息: Mint 14 Nadia,Linux 3.5.0-17-generic(x86_64)
以下是我的代码
#!/usr/bin/env python
import sys, os
import wx
class WinFrame(wx.Frame):
def __init__(self, parent, title):
super(WinFrame, self).__init__(parent,
title=title,
size=(400,400))
self.panel = wx.Panel(self,-1, size=(400,400))
self.panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.panel.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
def OnKeyUp(self, event):
print 'up'
def OnKeyDown(self, event):
print 'down'
class PicSampleApp(wx.App):
def __init__(self):
super(PicSampleApp, self).__init__(0)
def createFrame(self):
self.frame = WinFrame(None, "test")
self.frame.Show(True)
self.SetTopWindow(self.frame)
app = PicSampleApp()
app.createFrame()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud) 以下过程失败.我错过了什么吗?
wxPython-src-3.0.1.1/testtestvirtualenv在终端,来自wxPython-src-3.0.1.1/:
./configure --prefix=/home/username/.virtualenvs/test --with-gtk2 --enable-unicode --with-opengl
#lots of output, confirms "Configured wxWidgets 3.0.1 for `x86_64-unknown-linux-gnu'"
make install
#lots of output, confirms:
# The installation of wxWidgets is finished. On certain
# platforms (e.g. Linux) you'll now have to run ldconfig
# if you installed a shared library and also modify the
# LD_LIBRARY_PATH (or equivalent) environment variable.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.virtualenvs/test/lib
# don't run ldconfig since that is a …Run Code Online (Sandbox Code Playgroud)python ×10
wxpython ×10
wxwidgets ×3
python-2.7 ×2
debian ×1
raspberry-pi ×1
ubuntu-14.10 ×1
virtualenv ×1