标签: wxpython

wxpython中限制wxListCtrl的大小

我想限制列表控制框的大小。让我们使用以下代码:

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 的问题是它的宽度太短了。我只想显示带有“名称”和“年龄”列的列表控制框并保存其余空间。我怎么做?

python user-interface wxpython

2
推荐指数
1
解决办法
2608
查看次数

如何确定 wx 控件是否被禁用

如何以编程方式确定特定控件(在我的情况下为 wx CheckBox)是否被禁用?我没有看到小部件具有“禁用”属性或“isDisabled”方法。

python wxpython

2
推荐指数
1
解决办法
920
查看次数

如何将2个功能绑定到单个事件

我有这个绑定“ 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)

如何将上述所有三个功能合并到一个功能中?

python wxpython

2
推荐指数
1
解决办法
1972
查看次数

当 wxPython 框架被调整大小时,最简单的监控方法是什么?

我想知道何时调整了框架的大小,以便我可以保存大小并在下次启动应用程序时记住它。这是我的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)

python wxwidgets wxpython

2
推荐指数
1
解决办法
2136
查看次数

wxPython:如何正确选择 ListCtrl 项目?

我的 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 个项目列表的窗口,第二个被选中。但是如果我按“向下”键 -选择了第一项!是否可以选择项目,因此按“向上”和“向下”键将移动现有选择并且不会跳到第一个项目?

python wxwidgets wxpython

2
推荐指数
1
解决办法
2693
查看次数

wxPython OnExit()没有停止线程?

我正在尝试创建一个线程,并在关闭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)

但是当我关闭框架时,它会继续打印.

python multithreading wxpython

2
推荐指数
1
解决办法
3237
查看次数

wxPython 使用计时器每 x 秒/分钟更新一次 StaticText

我正在尝试使用计时器和函数的输出来更新一些静态文本。

代码在这里:代码

我对 wxPython 知之甚少,这是我不明白的许多事情之一,这令人抓狂,如果我打印 apper 的输出来控制台它可以完美运行,我想要做的就是将打印出来的内容打印到控制台应用于文本。

我究竟做错了什么?

python wxwidgets wxpython

2
推荐指数
1
解决办法
2653
查看次数

隐藏/保护Python代码

我正在编写代码(Python和wxpython for GUI),它将在Raspberry PI上的Debian OS上运行.我想保护/隐藏源代码.有什么办法吗?可能是py2exe,还是将它转换为库或其他东西?

python debian wxpython python-2.7 raspberry-pi

2
推荐指数
1
解决办法
2万
查看次数

wxpython 无法捕获 EVT_KEY_DOWN enent

我无法捕获 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)

python wxpython

2
推荐指数
1
解决办法
503
查看次数

如何在Ubuntu 14.10上的Python 2.7 virtualenv中安装wxPython 3.0.1.1?

以下过程失败.我错过了什么吗?

  • 安装各种Ubuntu包(编译的先决条件)
  • 获取http://downloads.sourceforge.net/wxpython/wxPython-src-3.0.1.1.tar.bz2
  • 解压缩到 wxPython-src-3.0.1.1/
  • 创建一个名为的新virtualenv test
  • 激活testvirtualenv
  • 在终端,来自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 wxpython virtualenv python-2.7 ubuntu-14.10

2
推荐指数
1
解决办法
1069
查看次数