我无法使用,wx.ProgressDialog因为我需要在对话框中添加额外的内容(暂停按钮和有关当前正在处理的内容的信息).是否只有我可以在自己的对话框中使用的进度条控件?
我当然可以自己绘制一些简单的东西,但由于程序需要在Mac OS X,Windows和Linux上运行,因此进度条具有原生外观会更好.
这段代码:
import wx
app = None
class Plugin(wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent, *args, **kwargs)
self.SetBackgroundColour((11, 11, 11))
self.name = "plugin"
self.Bind(wx.EVT_ENTER_WINDOW, self.onMouseOver)
self.Bind(wx.EVT_LEAVE_WINDOW, self.onMouseLeave)
wx.EVT_ENTER_WINDOW(self, self.onMouseOver)
wx.EVT_LEAVE_WINDOW(self, self.onMouseLeave)
def onMouseOver(self, event):
self.SetBackgroundColor((179, 179, 179))
self.Refresh()
def onMouseLeave(self, event):
self.SetBackgroundColor((11, 11, 11))
self.Refresh()
def OnClose(self, event):
self.Close()
app.Destroy()
def name():
print self.name
app = wx.App()
frame = wx.Frame(None, -1, size=(480, 380))
Plugin(frame)
frame.Show(True)
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
给我错误:
Traceback (most recent call last):
File "C:\.... ... ....\plugin.py", line 18, in onMouseOver …Run Code Online (Sandbox Code Playgroud) 我有自己的绘图程序,有各种"绘图工具",如钢笔,橡皮擦,矩形,圆形,选择,文本等.
它是用Python和wxPython制作的.上面提到的每个工具都是一个类,它们都有多态方法,例如left_down(),mouse_motion(),hit_test()等.程序管理所有绘制形状的列表 - 当用户绘制形状时,它被添加到列表.这也用于管理撤消/重做操作.
所以,我有一个不错的代码库,我可以将协作绘图挂钩.可以更改每个形状以了解其所有者 - 绘制它的用户,并且仅允许对一个人拥有的形状执行删除/移动/重新缩放操作.
我只是想知道开发这个的最好方法."会话"中的一个人将不得不充当服务器,我没有钱提供免费的中央服务器.不知何故,用户需要一种连接服务器的方式,这意味着某种"发现服务器"浏览器......或其他东西.如何广播对应用程序所做的更改?实时绘制并在每个鼠标运动事件上广播消息在性能方面将是昂贵的,并且在给定时间用户越多,事情就越糟糕.
任何想法都是受欢迎的,我不太确定从哪里开始开发这个(甚至如何测试它)
无论如何禁用笔记本标签?就像你可以使用Widgets本身一样?我有一个漫长的过程,虽然对于那些看着它的人来说应该是非常明显的,但我希望能够防止用户在其他标签中乱窜,直到它运行的过程完成.
我似乎无法找到任何wx.Notebook帮助这个?
代码段:
def __init__(self, parent):
wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)
self.AddPage(launchTab.LaunchPanel(self), "Launch")
self.AddPage(scanTab.ScanPanel(self), "Scan")
self.AddPage(extractTab.ExtractPanel(self), "Extract")
self.AddPage(virtualsTab.VirtualsPanel(self), "Virtuals")
Run Code Online (Sandbox Code Playgroud) 我正在尝试捕获在wx.Frame中发生的键盘事件,我希望以下代码能够捕获这些事件.但是,当我运行代码时,从不调用处理程序OnKeyDown:
import logging as log
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Bind(wx.EVT_KEY_UP, self.OnKeyDown)
self.Bind(wx.EVT_CHAR, self.OnKeyDown)
self.SetFocus()
self.Show(True)
def OnKeyDown(self, event=None):
log.debug("OnKeyDown event %s" % (event))
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
如果有人知道如何做到这一点,我将不胜感激.
我有MAC OS X 10.8,我已经使用Python的官方二进制文件将我的python更新到2.7.3版本.
我正在尝试运行需要使用32位python执行的python脚本.
我怎么能强制运行32位python而不是64位?
命令文件/ usr/bin/python为我提供了以下输出.
Alis-Mac:~ ali$ file /usr/bin/python
/usr/bin/python: Mach-O universal binary with 2 architectures
/usr/bin/python (for architecture i386): Mach-O executable i386
/usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
Run Code Online (Sandbox Code Playgroud)
我也试过以下.
export VERSIONER_PYTHON_PREFER_32_BIT=yes
Run Code Online (Sandbox Code Playgroud)
但这甚至没有帮助,因为现在,我猜我有自定义python.
我的脚本中有wxpython代码,我正在使用platypus为OSX构建应用程序,所以,我必须强制我的脚本运行32位python.请帮忙.
我正在尝试使用Notebook类在wxPython中制作标签.使用上面链接的教程,我想出了以下代码:
#!/usr/bin/env python
import wx
class DeployTab(wx.Panel):
def __init__(self, parent, *args, **kwargs):
super(DeployTab, self).__init__(self, *args, parent=parent, id=wx.ID_ANY, **kwargs)
self.sizer = wx.Panel(self)
self.sizer = wx.BoxSizer(wx.VERTICAL)
deploy = wx.Button(
self.main_panel,
label="test 1",
size=(250, 100))
self.sizer.Add(deploy, flag=wx.EXPAND|wx.ALL, border=5)
self.SetSizer(self.sizer)
class ConfigTab(wx.Panel):
# For now, copy.
def __init__(self, parent, *args, **kwargs):
super(ConfigTab, self).__init__(self, *args, parent=parent, id=wx.ID_ANY, **kwargs)
self.sizer = wx.Panel(self)
self.sizer = wx.BoxSizer(wx.VERTICAL)
deploy = wx.Button(
self.main_panel,
label="test2",
size=(250, 100))
self.sizer.Add(deploy, flag=wx.EXPAND|wx.ALL, border=5)
self.SetSizer(self.sizer)
class NotebookTabs(wx.Notebook):
def __init__(self, parent):
super(NotebookTabs, self).__init__(self, parent, …Run Code Online (Sandbox Code Playgroud) 我想在我的wxpython程序中设置一个图标.到目前为止,在阅读了许多页面和示例之后,我能够在窗口设置一个图标,这在使用alt + tab时也能正常工作(我在Windows 7上工作).
但任务栏上的图标是通常的python默认图标.
我不明白为什么这么简单的任务会有这么多麻烦.
这是我的代码:
class GraphFrame(wx.Frame):
""" The main frame of the application
"""
title = 'My first wxprogram'
def __init__(self):
wx.Frame.__init__(self, None, -1, self.title)
ico = wx.Icon('dog.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(ico)
self.set_icon
self.create_menu()
self.create_status_bar()
self.create_main_panel()
#...
Run Code Online (Sandbox Code Playgroud) 我构建了一个运行后台线程的wx python应用程序来执行一些计算.但是,我目前的实现不允许进行单元测试.
我非常密切地基于本教程中的第一个示例实现了我的实现:http://wiki.wxpython.org/LongRunningTasks
下面的代码使用wx.PostEvent()和frame.connect()向主框架注册结果事件,表明计算已完成.我还展示了一个单元测试代码片段.
但是,对于要捕获的线程结果事件,wx.App.MainLoop()必须启动.但是,我不知道如何在单元测试中模拟这种行为.
我对GUI单元测试的理解通常是手动模拟事件.但是在这种情况下,我想让我的后台线程运行.我应该修改实施吗?或者为了单元测试的目的,我可以通过其他方式存根计算线程吗?例如,我应该在单元测试代码中运行线程,然后一旦完成,调用GUI代码直接处理此事件?
import time
from threading import *
import unittest
import wx
# Button definitions
ID_START = wx.NewId()
ID_STOP = wx.NewId()
# Define notification event for thread completion
EVT_RESULT_ID = wx.NewId()
def EVT_RESULT(win, func):
"""Define Result Event."""
win.Connect(-1, -1, EVT_RESULT_ID, func)
class ResultEvent(wx.PyEvent):
"""Simple event to carry arbitrary result data."""
def __init__(self, data):
"""Init Result Event."""
wx.PyEvent.__init__(self)
self.SetEventType(EVT_RESULT_ID)
self.data = data
print "inside result event"
class WorkerThread(Thread): …Run Code Online (Sandbox Code Playgroud) 在HTML中,我可以创建如下的下拉菜单:
<select name="">
<option value="">TextNode #1</option>
<option value="">TextNode #2</option>
<select>
Run Code Online (Sandbox Code Playgroud)
现在我想在wxPython中有类似的东西.问题是我没有找到解决方案,因为它只允许我放置文本而不是值.
示例wxPython(创建下拉列表):
DropDownList = []
Options = {0:"None",1:"All",2:"WTF?!!"}
For Value, TextNode in Options:
DropDownList.append( TextNode )
wx.ComboBox(panel,value="Select",choices=DropDownList)
Run Code Online (Sandbox Code Playgroud)
那么......我如何使用文本节点的增值?谢谢!
python ×10
wxpython ×10
wxwidgets ×3
icons ×1
macos ×1
paint ×1
panel ×1
platypus ×1
python-2.7 ×1
twisted ×1
unit-testing ×1
whiteboard ×1
wxnotebook ×1