我对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) 我想要一个只接受数字的文本控件.(只需45或366之类的整数值)
做这个的最好方式是什么?
我在python程序中有一个wx.ListBox,我不想在wx.Timer更新中更改其中的列表.我有计时器工作,我只是不知道如何更改它显示的列表.
我遇到了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) 我正在尝试使用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)
然后将此面板添加到另一个面板,其中相对于正在添加的其他面板确定其大小.虽然我对面板的外部尺寸感到满意,但我无法让图形适合面板:

所有爪子的大面板应缩放以适应面板,同时保持其纵横比.
所以我想知道,为什么这个数字不会扩展到适合面板?
我有一条多线
wx.TextCtrl()
Run Code Online (Sandbox Code Playgroud)
我设置它的forground和用于写字符串的背景颜色的对象.我需要用不同的颜色写出不同的线条,
wx.TextCtrl.setForgroundcolor()
Run Code Online (Sandbox Code Playgroud)
改变所有以前的线条颜色.这有什么方法吗?
我正在开发一个相当简单的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程序创建一个GUI,我在Photoshop中有一个模型,我正在寻找一个支持主题或任何其他可以完成这项工作的库的库.
我的GUI设计包含渐变,边框,边框半径以及带有自定义最小化和关闭按钮的自定义标题栏,例如,查看适用于Windows的Github客户端或任何Adobe软件安装程序.
我试过wxPython,我曾经style=wx.NO_BORDER删除了标题栏和Windows添加的默认边框,但我觉得我没有使用正确的工具来完成这项工作而且我在某处读到wxPython主要用于本机外观GUI而不是用于这种定制所以我应该寻找其他的东西.
我在这里找到了一个答案,建议使用PyQT和QML在GUI中进行高度自定义,但编译后的文件大小非常大.
那么我应该用什么来创建自定义GUI?我也想编译程序,所以我需要用合理的文件大小来编写它.
我正在用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) 我正在寻找一种简单的模式来使用窗口内的wx.grid.Grid对象获取自动适应窗口的效果。
到目前为止,我的4列网格在右侧有许多空白,但是我发现这非常难看,如果所有列根据窗口大小的变化而展开或折叠,效果都会更好!
有没有办法使它起作用?