问题标签 [wxpython]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
705 浏览

event-handling - 在打开的 wx.ComboCtrl 中接收击键

来自这个问题,我有一个带有自定义弹出窗口的 wxComboCtrl,该弹出窗口由带有一堆单选按钮的面板组成。我的问题是,当我打开弹出窗口时,组合没有击键,因为事件由面板本身处理..我想将这些KeyEvents重定向到组合的textctrl,但我找不到让它工作的方法:/
我走错路了吗?我应该在用户按键时手动处理 textctrl 值吗?我认为这会有点麻烦.. 因为据说 textctrl 已经知道如何处理这些事件..

这是我的测试用例(Linux 上的 wxPython 2.8),“on_key”方法应该是罪魁祸首:

编辑:
我在同一主题上发现了这些(未解决的)讨论。
“当显示 ComboPopup 时,ComboCtrl 失去键盘焦点”
“使用 wx.ComboCtrl 的问题”

0 投票
1 回答
409 浏览

python - 将滚动条添加到 pythoncard 应用程序

pythoncard 尚不支持将滚动窗口作为应用程序的主框架。如何将滚动条添加到主框架(背景)?

0 投票
3 回答
801 浏览

python - 组织 GUI 应用程序

这将是一个通用问题。

我正在努力设计一个 GUI 应用程序,尤其是。处理不同部分之间的交互。

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

一个例子:

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

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

现在,编辑器组件捕获按键。它必须有权访问每个会话的键映射,因此它需要访问会话。将编辑器与会话耦合是个好主意吗?其他组件也需要访问键绑定,因此会话现在变为共享并且可以是单例...

是否有任何关于设计超越 MVC 的 GUI 应用程序的好读物?

这是 Python 和 wxPython,FWIW。

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

0 投票
1 回答
1654 浏览

python - Vista UAC(用户访问控制)的python IPC(进程间通信)

我正在 (wx)python 中编写文件管理器 - 很多已经有效。复制文件时已经有一个进度对话框,覆盖处理等。

现在在 Vista 中,当用户想要将文件复制到某些目录(例如 %Program Files%)时,应用程序/脚本需要提升,在运行时不能要求提升。所以我必须启动另一个提升的应用程序/脚本,它可以完成工作,但需要与主应用程序通信,因此后者可以更新进度等。

我搜索并发现很多文章说共享内存和管道是最简单的方法。所以我正在寻找的是一个“高级”平台独立的ipc库,它使用共享内存或管道进行python绑定。

我已经找到了 ominORB、fnorb 等。它们看起来很有趣,但是使用 TCP/IP,是否有使用共享内存或管道的等效库?由于 ipc-client 总是在同一台机器上,因此这里似乎不需要套接字。而且我还担心用户必须在他/她的个人防火墙上允许 ipc-socket-communications。

编辑:我的意思是高级别的:能够像使用omniORB而不是将字符串发送到stdin/stdout时那样调用一些函数会很棒。

0 投票
2 回答
1234 浏览

python - wxPython中OLE拖拽方式

我有在 MS Windows 上运行的 wxPython 应用程序,我希望它支持其实例之间的拖放(因此用户打开我的应用程序 3 次并将数据从一个实例拖到另一个实例)。

wxPython 中的简单拖放就是这样工作的:

  1. 用户发起拖动:源窗口在 wx.DataObject() 中打包必要的数据,创建新的 wx.DropSource,设置其数据并调用 dropSource.DoDragDrop()
  2. 用户将数据拖放到目标窗口:拖放目标调用库函数 GetData(),它将实际数据传输到其 wx.DataObject 实例,最后 - dataObject.GetData() 解包实际数据。

我想要一些更复杂的拖放功能,允许用户选择在他下降后拖动哪些数据。我的梦想
场景:

  1. 用户发起拖拽:只有一些指向源窗口的指针被打包(一些函数或对象)。
  2. 用户将数据拖放到目标窗口:显示漂亮的对话框,询问用户他选择了哪种拖放模式(例如 - 仅拖动歌曲标题,或歌曲标题和艺术家姓名或拖动艺术家的整个专辑)。
  3. 用户选择拖拽模式:Drop target 在拖拽的数据对象上调用一些函数,然后从拖拽源中取出数据并传送到drop target。

我梦想的场景在 MS Windows 中似乎是可行的,但是 wxWidgets 和 wxPython 的文档非常复杂且模棱两可。并非所有 wx.DataObject 类都在 wxPython 中可用(仅 wx.PySimpleDataObject),所以我希望有人分享他对这种方法的经验。这样的行为是否可以在 wxPython 中实现而无需直接在 winAPI 中进行编码?

编辑:Toni Ruža 通过工作拖放示例给出了答案,但这并不是我梦寐以求的场景。他的代码在数据被拖放时操作数据(HandleDrop()显示弹出菜单),但数据在启动拖动时准备好(在On_ElementDrag()中)。在我的应用程序中应该有三种不同的拖放模式,其中一些需要耗时的数据准备。这就是为什么我想将数据检索推迟到用户丢弃数据并选择(可能成本高昂)d&d 模式的那一刻。

对于内存保护问题 - 我想使用 OLE 机制进行进程间通信,就像 MS Office 一样。您可以复制 Excel 图表并将其粘贴到 MS-Word 中,它的行为就像图像(嗯,有点)。由于它有效,我相信它可以在 winAPI 中完成。我只是不知道我是否可以在 wxPython 中对其进行编码。

0 投票
2 回答
11680 浏览

python - wxpython 的 Easy_install 有“安装脚本”错误

我安装了 fink 放在 /sw/bin/ 中的 python 2.5。我使用简单的安装命令

尝试安装 wxpython,但在尝试处理 wxPython-src-2.8.9.1.tab.bz2 时出现错误,表明没有安装脚本。在此之前,Easy-install 已适用于其他几种安装。任何关于为什么它现在破坏的帮助?

编辑:错误发生在转储回 shell 提示符之前。

阅读http://wxPython.org/download.php
最佳匹配:wxPython src-2.8.9.1
下载http://downloads.sourceforge.net/wxpython/wxPython-src-2.8.9.1.tar.bz2
处理wxPython- src- 2.8.9.1.tar.bz2
错误:在 /tmp/easy_install-tNg6FG/wxPython-src-2.8.9.1.tar.bz2 中找不到安装脚本

0 投票
2 回答
1294 浏览

python - 静态文本项目在 wx.StaticBox 中消失

我正在一个垂直大小调整器中创建一个 staticbox 和一个 staticboxsizer。一切对我来说都很好,但不适用于客户的环境。

静态框中的所有内容都会显示,但标签除外。下面的片段显示了我如何构造 staticboxsizer。

comp.MinMaxLabel_* 返回一个 wx.StaticText(label='blah'),没什么花哨的,只是一个包装器,它适用于其他尺寸器中的其他 ~400 个项目。但在 StaticBox 或 StaticBoxSizers 中,客户的设置上没有显示 StaticText。

通常它在我的设置中显示为: alt text http://img152.imageshack.us/img152/8758/normalnu9.jpg

这就是我在客户设置中得到的: alt text http://img258.imageshack.us/img258/2351/problematiczo2.jpg

两种设置都具有相同的 wxpython 版本,即 2.8.9.1。但 2.8.* 也显示在我的环境中。有什么建议么?

0 投票
2 回答
625 浏览

wxpython - ScrolledWindow 和 wx.EVT_LEAVE_WINDOW

我有一个带有 textctrl 的框架。当鼠标进入 textctrl (EVT_ENTER_WINDOW) 时,我在 textctrl 顶部显示一个 PopupWindow,当鼠标离开弹出窗口 (EVT_LEAVE_WINDOW) 时,我再次隐藏它。

一切正常,除非在 PopupWindow 内有一个 ScrolledWindow和显示的滚动条。当我将鼠标移动到滚动条顶部时,EVT_LEAVE_WINDOW 会被触发,所以看起来 wxPython 认为滚动条不是滚动窗口的一部分。:/我尝试将事件绑定到弹出窗口或滚动窗口本身,但没有任何变化。 . 有没有办法解决这个问题?

非常感谢!

(Xubuntu 8.10 上的 wxPython 2.8.8.0)

0 投票
4 回答
7835 浏览

python - 如何使用 wxPython 布局 3 窗格窗口?

我正在尝试找到一种使用 wxPython 布局 3 窗格窗口的简单方法。

我想在左窗格中有一个树列表,然后有一个分成两部分的右窗格 - 顶部有一个编辑组件,底部有一个网格组件。

类似于以下内容:

我希望窗口可以重新调整大小,并让用户能够通过拖动边框来更改窗口中每个组件的(相对)大小。

我认为我需要一些 sizers 和/或 splitter-window 组件的组合,但在文档或网络上找不到这种窗口的一个像样的例子。

0 投票
4 回答
1637 浏览

python - 使用 (wx)python 记录外部程序的输出

我正在编写一个用于使用 oracle exp/imp 命令并通过 sqlplus 启动 sql-scripts 的 GUI。subprocess 类使启动命令变得容易,但我需要一些额外的功能。我想在使用我的 wxPython GUI 时摆脱命令提示符,但我仍然需要一种方法来显示 exp/imp 命令的输出。

我已经尝试过这两种方法:

通过其中一种方法(忘了哪一种),我确实得到了 exp/imp 的输出,但只有在命令完成之后,这对我来说毫无价值,因为在这些可能长时间运行的操作期间我需要经常更新。并且 sqlplus 提出了更多问题,因为 sqlplus 在发生错误时主要需要一些输入。当发生这种情况时,python 等待进程完成但用户看不到提示,所以你不知道要等待多长时间或做什么......

我想要的是一个包装器,它输出我在标准命令行上可以看到的所有内容。我想将它记录到一个文件中并在 wxPython 控件中显示它。

我还尝试了此页面中的代码: http: //code.activestate.com/recipes/440554/ 但这也无法读取输出。此答案中的 OutputWrapper 也不起作用:How can I capture all exceptions from a wxPython application?

任何帮助,将不胜感激!

编辑:
子进程似乎没有刷新它们的输出。我已经用 .readline() 试过了。
我的工具必须在 windows 和 unix 上运行,所以如果没有 windows 版本,pexpect 是没有解决方案的。并且使用 cx_oracle 将是极端的矫枉过正,因为我将不得不重建 exp、imp 和 sqlplus 的整个功能。