标签: wxpython

组织GUI应用程序

这将是一个普遍的问题.

我正在努力设计GUI应用程序,尤其是.处理不同部分之间的相互作用.

我不知道应该如何处理共享状态.一方面,共享状态很糟糕,事情应该尽可能明确.另一方面,没有共享状态会在组件之间引入不需要的耦合.

一个例子:

我希望我的应用程序可以通过脚本以Emacs/Vim的方式扩展.显然,需要修改某种共享状态,以便GUI使用它.我最初的计划是有一个可以从任何地方访问的全球"会话",但我不太确定.

一个棘手的用例是键绑定.我希望用户能够从脚本中指定自定义键绑定.每个键绑定映射到一个任意命令,该命令接收会话作为唯一参数.

现在,编辑器组件捕获了按键.它必须能够访问每个会话的键映射,因此需要访问会话.将编辑器与会话结合起来是一个好主意吗?其他组件也需要访问键绑定,因此会话现在变为共享,可以是单个...

关于设计超出MVC的GUI应用程序有什么好的阅读吗?

这是Python和wxPython,FWIW.

[编辑]:添加了具体的用例.

python architecture model-view-controller user-interface wxpython

9
推荐指数
1
解决办法
779
查看次数

wxPython:如何创建一个bash shell窗口?

我想使用wxPython创建一个弹出窗口,其作用类似于bash shell.我不想要终端模拟器,我不需要作业控制,我只想要一个基于bash过程的REPL(读取,评估,打印循环).

使用wxPython有一个简单的方法吗?我知道我作为一名tcl/tk程序员的基本概念,但我的wxPython fu很弱,如果我不需要,我不想重新发明轮子.我已经阅读了一些关于py.shell的内容.Shell,但看起来它创建了一个python shell,我想要一个运行bash命令.

wxpython

9
推荐指数
2
解决办法
7714
查看次数

你如何强制刷新wx.Panel?

我正在尝试修改Panel的控件,让它更新,然后继续执行代码.问题似乎是Panel在刷新之前正在等待空闲.我当然尝试刷新以及GetSizer().Layout()甚至使用SendSizeEvent()方法向帧发送resize事件,但无济于事.我在这里不知所措,我发现很难相信没有办法强制重新绘制这个面板.以下是更改控件的代码:

def HideButtons(self):
        self.newButton.Show(False)
        self.openButton.Show(False)
        self.exitButton.Show(False)
        self.buttonSizer.Detach(self.newButton)
        self.buttonSizer.Detach(self.openButton)
        self.buttonSizer.Detach(self.exitButton)
        loadingLabel = wx.StaticText(self.splashImage, wx.ID_ANY, "Loading...", style=wx.ALIGN_LEFT)
        loadingLabel.SetBackgroundColour(wx.WHITE)
        self.buttonSizer.Add(loadingLabel)
        self.GetSizer().Layout()
        self.splashImage.Refresh()
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这样的事情?你是怎么解决的呢?

python wxpython refresh panel

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

在wxPython的窗口中显示.png图像

如何.png在wxPython窗口中显示图像?

png wxpython

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

pylint抱怨wxPython'太多的公共方法'

对于以下简单的wxPython片段:

import sys
import wx

class MyApp(wx.App):
    def OnInit(self):
        self.frame = wx.Frame(None, title="Simple wxPython App")
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

def main(argv=sys.argv[:]):
    app = MyApp()
    app.MainLoop()
    return 0

if __name__ == '__main__':
    sys.exit(main())
Run Code Online (Sandbox Code Playgroud)

我总是从pylint收到警告msg"R0904:12:MyApp:太多的公共方法".有什么想法可以防止吗?

python wxpython pylint

9
推荐指数
1
解决办法
5823
查看次数

如何在Python文件对话框中使用多个通配符

如何使用下面的代码让用户浏览png或jpeg文件?我做得对吗?

wildcard = "pictures (*.jpeg/*.png)|*.jpeg/*.png"
dlg = wx.FileDialog(self, message="Select your picture file",defaultDir=os.getcwd(),defaultFile="*.jpeg/*.png", wildcard=wildcard, style=wx.OPEN)

if dlg.ShowModal() == wx.ID_OK:
         picfile = dlg.GetFilename()
         print picfile
Run Code Online (Sandbox Code Playgroud)

python wxpython

9
推荐指数
1
解决办法
4946
查看次数

如何在virtualenv中安装wxPython

我在Mac OSX Lion机器上,我已经下载了wxPython-src-2.9.3.1.tar.bz2.然后我做了以下(注意:输出消息已被删除):

$ tar -xjf wxPython-src-2.9.3.1.tar.bz2
$ cd wxPython-src-2.9.3.1
$ mkdir bld
$ cd bld
$ source /path/to/myvirtualenv/bin/activate
(myvirtualenv)$ cross_compiling=yes
(myvirtualenv)$ export MACOSX_DEPLOYMENT_TARGET=10.6.7
(myvirtualenv)$ set arch_flags="-arch ppc64 "
(myvirtualenv)$ ../configure \
--with-mac --enable-monolithic --enable-threads --enable-unicode \
--enable-debug_flag --enable-debug \
--with-libpng --with-libjpeg --with-libtiff --enable-unicode \
--with-opengl --enable-graphics_ctx --with-odbc --enable-gui \
--with-macosx-sdk=/Developer/SDKs/MacOSX10.6.sdk --with-macosx-version-min=10.6 \
CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags" --prefix=/path/to/myvirtualenv/
$ (myvirtualenv)make
$ (myvirtualenv)make install
Run Code Online (Sandbox Code Playgroud)

在那之后,我确实收到了这条消息(所以我猜它成功了):

...
 ------------------------------------------------------

 The installation of wxWidgets is finished.  On certain …
Run Code Online (Sandbox Code Playgroud)

python windows macos wxpython virtualenv

9
推荐指数
2
解决办法
9526
查看次数

在wxPython中创建滚动面板

级别:初学者

我最近开始使用wxPython编写GUI应用程序.我在创建可滚动面板时遇到问题.我已经有一个wx.Frame工作正常.我的gui有2个面板.(请暂时忽略面板-3)我想让我的面板2可滚动,以便它可以包含更多元素.我的GUI的基本结构如下:

GUI演示

我已经尝试wx.lib.scrolledpanel.ScrolledPanel()在我的代码中使用但滚动条由于某种原因没有出现.我的代码如下:

panel2 = wx.lib.scrolledpanel.ScrolledPanel(self,-1, size=(600,400), pos=(0,28), style=wx.SIMPLE_BORDER)
panel2.SetupScrolling()
button1 = wx.Button(panel2,label="Button 1",pos=(0,50),size=(50,50))
button2 = wx.Button(panel2,label="Button 2",pos=(0,100), size=(50,50))
button3 = wx.Button(panel2,label="Button 3",pos=(0,150),size=(50,50))
button4 = wx.Button(panel2,label="Button 4",pos=(0,200), size=(50,50))
button5 = wx.Button(panel2,label="Button 5",pos=(0,250),size=(50,50))
button6 = wx.Button(panel2,label="Button 6",pos=(0,300), size=(50,50))
button7 = wx.Button(panel2,label="Button 7",pos=(0,350), size=(50,50))
button8 = wx.Button(panel2,label="Button 8",pos=(0,400), size=(50,50))
Run Code Online (Sandbox Code Playgroud)

目前,当我执行我的代码时,我得到的面板2只有7个按钮而不是8.我希望第8个按钮会创建滚动条,因为它不适合面板2的尺寸.任何人都可以建议什么可能解决我的问题或我错过了什么?

谢谢你的时间和PS:这里有一个类似的问题,但没有回答.

完整的代码可以在下面找到:

import wx
import wx.lib.scrolledpanel

    class GUI(wx.Frame):

        def __init__(self,parent,id,title):
            #First retrieve the screen size of the device
            screenSize = wx.DisplaySize()
            screenWidth = screenSize[0]
            screenHeight = …
Run Code Online (Sandbox Code Playgroud)

python wxwidgets wxpython

9
推荐指数
1
解决办法
9530
查看次数

ImportError:没有名为cycler的模块

我正在使用wxpython和matplotlib来开发软件,当我完成我的工作时,我想通过py2exe将python文件转换为"*.exe"文件,因此它可以在Windows中使用.这是"setup.py"文件.

from distutils.core import setup  
import py2exe  
import sys  
includes = ["encodings", "encodings.*"]    
sys.argv.append("py2exe")  
options = {"py2exe":   { "bundle_files": 1 ,"dll_excludes":["MSVCP90.dll"]}}   
setup(options = options,  
      zipfile=None,   
      console = [{"script":'test.py'}])
Run Code Online (Sandbox Code Playgroud)

然后我执行了这个脚本python setup.py来生成test.exe,并且它有效.

当我执行test.exe时发布错误ImportError: No module named cycler

然后,我尝试import cycler在python shell中执行,并且没有发生错误.另外,我检查了python目录 c:/python27/Lib/site-packages/,该cycler-0.9.0-py2.7.egg文件存在于此处.

如何处理这个问题.

python wxpython py2exe matplotlib

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

在Windows 10上绑定某些全局热键失败

我是Windows的长期用户,他非常喜欢使用许多不同的实用程序(有些是我自己用Python编写的)和AutoHotKey脚本来自定义Windows。这些都使用全局热键来实现其功能。

最近,我被迫升级到Windows10。问题之一是某些热键似乎无法绑定。几个示例是ctrl-j和ctrl-v。

有人告诉我,我需要通过“属性”将这些应用标记为以管理员身份运行,但是即使如此,它们仍无法成功绑定到这些热键。

知道如何绑定这些热键吗?

更新:

像AHK看起来能够绑定到这些键,但不断有用同上也没有了,我的wxPython的程序是没有。知道为什么后两个不能绑定到这些键,我该如何解决?

wxpython autohotkey keyboard-shortcuts global-hotkey windows-10

9
推荐指数
1
解决办法
136
查看次数