标签: wxpython

如何调试py2exe'应用程序无法正确初始化'错误?

我对Python一般都很陌生,但我在Python 2.6/wxPython 2.8中创建了一个应用程序,当我通过Python运行时它非常有效.但我想更进一步,并能够将其部署为Windows可执行文件,所以我一直在尝试py2exe.但是我无法让它发挥作用.它总是会编译一个exe,但是当我真的尝试运行它时会发出一些神秘的错误消息.起初他们是简单的消息,说它找不到某些DLL,但即使给它所需的所有DLL,它现在返回:

The application failed to initialize properly (0xc0000142).
Click OK to terminate the application.
Run Code Online (Sandbox Code Playgroud)

所以我打破了局面,只是用wxPython制作了一个非常非常简单的应用程序,看看它是否有用,或者我的原始应用程序的一些更复杂的功能是否会妨碍.但即便是我的简单测试也返回了相同的错误.这是简单测试脚本的代码:

import wx

class MainWindow(wx.Frame):

    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX)
        panel = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)
        main_sizer = wx.BoxSizer(wx.VERTICAL)

        testtxt = wx.StaticText(panel, -1, label='This is a test!')
        main_sizer.Add(testtxt, 0, wx.ALIGN_CENTER)

        panel.SetSizerAndFit(main_sizer)
        self.Show(1)
        return

app = wx.PySimpleApp()
frame = MainWindow(None, -1, 'Test App')
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)

这是我使用的py2exe安装脚本:

#!/usr/bin/python

from distutils.core import setup
import py2exe

manifest …
Run Code Online (Sandbox Code Playgroud)

python wxpython py2exe

7
推荐指数
1
解决办法
5732
查看次数

是否可以将TextCtrl限制为仅在wxPython中接受数字?

我想要一个只接受数字的文本控件.(只需45或366之类的整数值)

做这个的最好方式是什么?

wxpython textctrl

7
推荐指数
2
解决办法
9000
查看次数

wxPython:更新wx.ListBox列表

我在python程序中有一个wx.ListBox,我不想在wx.Timer更新中更改其中的列表.我有计时器工作,我只是不知道如何更改它显示的列表.

python wxpython

7
推荐指数
1
解决办法
6475
查看次数

wxPython包装StaticText的问题

我遇到了wxPython的问题.下面发布了代码的简化版本(删除了空格,注释等以减小大小 - 但我的程序的一般格式保持大致相同).当我运行脚本时,静态文本正确地包装,但面板中的其他项不会向下移动(它们就好像静态文本只有一行,因此并不是所有内容都可见).如果我手动调整窗口/框架的大小,即使只是很小的数量,一切都会得到纠正并按原样显示.我拍摄了屏幕截图来显示这种行为,但我刚创建了这个帐户,因此没有必要的10个声望点可以发布图片.

为什么开始时显示不正确?我尝试了GetParent().Refresh()或Update()和GetTopLevelParent().Update()或Refresh()的各种组合.我已经尝试了所有我能想到的但却无法在不手动调整框架/窗口大小的情况下正确显示它.一旦重新调整大小,它就会按照我的要求运行.

信息:
Windows XP
Python 2.5.2
wxPython 2.8.11.0(msw-unicode)

有什么建议?谢谢!

码:

#! /usr/bin/python

import wx

class StaticWrapText(wx.PyControl):
   def __init__(self, parent, id=wx.ID_ANY, label='', pos=wx.DefaultPosition,
                size=wx.DefaultSize, style=wx.NO_BORDER,
                validator=wx.DefaultValidator, name='StaticWrapText'):
      wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name)
      self.statictext = wx.StaticText(self, wx.ID_ANY, label, style=style)
      self.wraplabel = label
      #self.wrap()
   def wrap(self):
      self.Freeze()
      self.statictext.SetLabel(self.wraplabel)
      self.statictext.Wrap(self.GetSize().width)
      self.Thaw()
   def DoGetBestSize(self):
      self.wrap()
      #print self.statictext.GetSize()
      self.SetSize(self.statictext.GetSize())
      return self.GetSize()

class TestPanel(wx.Panel):
   def __init__(self, *args, **kwargs):
      # Init the base class
      wx.Panel.__init__(self, *args, **kwargs)
      self.createControls()
   def createControls(self):
      # --- …
Run Code Online (Sandbox Code Playgroud)

python static wxpython

7
推荐指数
2
解决办法
8341
查看次数

如何让FigureCanvas适合Panel?

我正在尝试使用Matplotlib和wxPython显示一些数据.我有一个图添加到FigureCanvasWxAgg中.然后将画布添加到BoxSizer并设置为wx.EXPAND | wx.ALL,BoxSizer轮流由SetSizerAndFit设置.

self.figure = Figure(None, dpi = 75)
self.displaycanvas = FigureCanvas(self, -1, self.figure)
self.axes = self.figure.add_subplot(111)
self.axes.imshow(self.data, interpolation="quadric")     

self.mainSizer = wx.BoxSizer()
self.mainSizer.Add(self.displaycanvas, 1, wx.EXPAND|wx.ALL, 5)
self.SetSizerAndFit(self.mainSizer)
Run Code Online (Sandbox Code Playgroud)

然后将此面板添加到另一个面板,其中相对于正在添加的其他面板确定其大小.虽然我对面板的外部尺寸感到满意,但我无法让图形适合面板:

在此输入图像描述

所有爪子的大面板应缩放以适应面板,同时保持其纵横比.

所以我想知道,为什么这个数字不会扩展到适合面板?

python wxpython matplotlib

7
推荐指数
1
解决办法
4294
查看次数

wxPython wxTextCtrl中每行的不同前景色

我有一条多线

wx.TextCtrl()
Run Code Online (Sandbox Code Playgroud)

我设置它的forground和用于写字符串的背景颜色的对象.我需要用不同的颜色写出不同的线条,

wx.TextCtrl.setForgroundcolor()
Run Code Online (Sandbox Code Playgroud)

改变所有以前的线条颜色.这有什么方法吗?

python wxpython

7
推荐指数
2
解决办法
5327
查看次数

退出关闭WxPython GUI的密钥

我正在开发一个相当简单的wxpython GUI,并希望能够使用转义键关闭窗口.现在我只有一个执行sys.exit(0)的关闭按钮,但我想要使用转义键来执行此操作.

有谁知道这样做的方法?

import win32clipboard
import wx
from time import sleep
import sys

class MainFrame(wx.Frame):
    def __init__(self,title):

        wx.Frame.__init__(self, None, title="-RRESI Rounder-", pos=(0,0), size=(210,160))
        panel=Panel(self)

        icon = wx.Icon('ruler_ico.ico', wx.BITMAP_TYPE_ICO) 
        self.SetIcon(icon) 

class Panel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        x1=10; x2=110
        y1=40; dy=25; ddy=-3
        boxlength=80

        self.button =wx.Button(self, label="GO", pos=(100,y1+dy*3))
        self.Bind(wx.EVT_BUTTON, self.OnClick,self.button)
        self.button.SetDefault()

        self.button2 =wx.Button(self, label="Close", pos=(100,y1+dy*4))
        self.Bind(wx.EVT_BUTTON, self.OnClose, self.button2)
        self.button.SetDefault()

        self.Bind(wx.EVT_KEY_UP, self.OnKeyUP)

        self.label1 = wx.StaticText(self, label="Input Number:", pos=(x1,y1+dy*1))
        self.Input = wx.TextCtrl(self, value="1.001", pos=(x2,ddy+y1+dy*1), size=(boxlength,-1))

        self.label0 = wx.StaticText(self, label="Round to closest:  1/", pos=(x1,y1+dy*0))
        self.Denominator …
Run Code Online (Sandbox Code Playgroud)

python wxpython

7
推荐指数
1
解决办法
2524
查看次数

如何为python程序创建自定义GUI?

我想用自定义设计为python程序创建一个GUI,我在Photoshop中有一个模型,我正在寻找一个支持主题或任何其他可以完成这项工作的库的库.

我的GUI设计包含渐变,边框,边框半径以及带有自定义最小化和关闭按钮的自定义标题栏,例如,查看适用于WindowsGithub客户端或任何Adobe软件安装程序.

我试过wxPython,我曾经style=wx.NO_BORDER删除了标题栏和Windows添加的默认边框,但我觉得我没有使用正确的工具来完成这项工作而且我在某处读到wxPython主要用于本机外观GUI而不是用于这种定制所以我应该寻找其他的东西.

我在这里找到了一个答案,建议使用PyQT和QML在GUI中进行高度自定义,但编译后的文件大小非常大.

那么我应该用什么来创建自定义GUI?我也想编译程序,所以我需要用合理的文件大小来编写它.

python user-interface wxpython pyqt

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

VTK窗口没有填充wx.Panel

我正在用wxPython和VTK创建一个应用程序.屏幕左侧有一个配置面板(wx.Panel),右侧有一个VTK窗口,也基于wx.Panel.将面板放置在wxFrame的boxsizer中,并使用wxFormBuilder应用程序中定义的比例大小调整大小,然后使用该大小来生成XRC文件.

在此输入图像描述

我有一个非常具体的问题,一些Windows 7机器一直没有正确调整窗口的VTK部分 - 请参阅上面屏幕截图中VTK窗口周围的白色边框.我试图让这个VTK窗口固定为1280x720 - 它是 - 但是有一个尺寸问题,一些元素正在切断窗口的底部和右边.在Ubuntu 10.04,XP或Windows 7的某些版本上运行时,此错误不存在(我不确定那些有效的和那些尚未有效的内容是什么).

当遇到这个错误时,我可以与屏幕的白色部分进行交互 - 通过VTK交互器正确处理点击,因此它仍然是我的VTK场景的一部分.

应用程序设置如下,右侧VTK窗格是graphics_panel.面板设置为wxEXPAND没有其他标志,我的应用程序中的所有元素都自动设置为大小(没有设置最小,最大或默认大小).唯一的例外是bSizer1(主要的wxFrame sizer),它具有最小宽度和高度设置(我不确定这是否是正确的方法,但它似乎工作正常).

面板设置

我从wxFormBuilder生成XRC,然后在我的应用程序中使用它,我的VTK场景设置如下:

class MyScene(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, style=wx.NO_BORDER) 
        #'parent' is main_frame (wx.Frame instance)
        self._parent = parent
        self.renderer = vtk.vtkRenderer()

        # I create and add my VTK actors here (SNIPPED)

        self._set_lighting()

        self.widget = VTKWidget(self,-1) #VTKWidget is a wxVTKRenderWindowInteractor
        self.widget.GetRenderWindow().AddRenderer(self.renderer)
        self.widget.Enable(1)
        self.widget.SetDoubleBuffered(True)

        self.Bind(wx.EVT_SIZE, self.on_size)
Run Code Online (Sandbox Code Playgroud)

我一直在尝试解决使用该on_size函数的元素大小的MyScene问题,但下面没有任何内容可以解决我的问题.报告的数值正常的和错误的系统是符合市场预期.

def on_size(self, evt):
    print "---- MyScene on_size ----"
    print "Widget …
Run Code Online (Sandbox Code Playgroud)

python wxwidgets wxpython vtk

7
推荐指数
1
解决办法
847
查看次数

如何使wxpython网格自动适合窗口

我正在寻找一种简单的模式来使用窗口内的wx.grid.Grid对象获取自动适应窗口的效果。

到目前为止,我的4列网格在右侧有许多空白,但是我发现这非常难看,如果所有列根据窗口大小的变化而展开或折叠,效果都会更好!

有没有办法使它起作用?

python user-interface datagrid wxpython

7
推荐指数
2
解决办法
3962
查看次数