我正在使用wxpython处理多平台应用程序,并且在绘制Panel时我在Windows上出现了闪烁问题.我曾经在鼠标运动事件中绘制缓冲区(wx.Bitmap),而我的OnPaint方法只是在线组成:
dc = wx.BufferedPaintDC(self, self.buffer)
Run Code Online (Sandbox Code Playgroud)
相当标准,但我仍然在Windows上有闪烁的问题,而一切都在Linux上运行良好.
我解决我的问题调用SetDoubleBuffered(True)的__init__方法.
奇怪的是,即使我不再使用BufferedPaintDC,现在一切正常.我更改了我的应用程序,以便所有绘图部分都在OnPaint方法中完成.我不使用缓冲区,直接在wx.PaintDC上完成绘图,完全没有闪烁问题.
所以我的问题是:BufferedPaintDC完全没用吗?或者以某种方式弃用?我是"WxPython in Action"(2006)一书的所有者,它甚至没有提到SetDoubleBuffered
我在各种大小调整器中有几个按钮,它们以我想要的方式扩展.但是,当我将父项添加到用于在框架中的所有元素周围添加边框的新wx.BoxSizer时,已添加的sizer在垂直方向上正确运行,但不能水平运行.
以下代码演示了此问题:
#! /usr/bin/env python
import wx
import webbrowser
class App(wx.App):
def OnInit(self):
frame = MainFrame()
frame.Show()
self.SetTopWindow(frame)
return True
class MainFrame(wx.Frame):
title = 'Title'
def __init__(self):
wx.Frame.__init__(self, None, -1, self.title)
panel = wx.Panel(self)
#icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG)
#self.SetIcon(icon)
sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10)
button1 = wx.Button(panel, -1, 'BUTTON')
sizer.Add(button1, 0, wx.EXPAND)
buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5)
buttonDelete = wx.Button(panel, -1, 'Delete')
buttonSizer.Add(buttonDelete, 0, 0)
buttonEdit = wx.Button(panel, -1, 'Edit')
buttonSizer.Add(buttonEdit, 0, 0)
buttonNew = wx.Button(panel, -1, 'New') …Run Code Online (Sandbox Code Playgroud) 如何从TextCtrl盒子里拿出琴弦?这是练习代码:
import wx
class citPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, id)
wx.StaticText(self, -1, "Choose put you would like:", (45, 15))
self.quote = wx.StaticText(self, -1, "1:", wx.Point(275, 180), wx.Size(200, -1))
self.quote = wx.StaticText(self, -1, "2:", wx.Point(275, 230), wx.Size(200, -1))
self.quote = wx.StaticText(self, -1, "3:", wx.Point(275, 280), wx.Size(200, -1))
class nextButton(wx.Button):
def __init__(self, parent, id, label, pos):
wx.Button.__init__(self, parent, id, label, pos)
class cancelButton(wx.Button):
def __init__(self, parent, id, label, pos):
wx.Button.__init__(self, parent, id, label, pos)
class searchBox(wx.TextCtrl):
def __init__(self, …Run Code Online (Sandbox Code Playgroud) 如何点击wx.Panel并更改其颜色?这个活动的名称是什么.
(我想做与Firefox Extras类似的事情)
提前致谢!:)
我正在使用wxPython的HyperTreeList,我想将列宽设置为完全等于其中最大字符串的长度.
为了实现这一点,我想将python字符串大小转换为像素.
例如:如果我们有一个字符串
str = "python"
len(str) = 6
Run Code Online (Sandbox Code Playgroud)
我怎么能将上面的字符串长度/大小转换为像素?
还有另外一种方法吗?
我想将wx.TextCtrl小部件的字体设置为Consolas,或者至少是另一种等宽字体.我该怎么做?
我主要是为精通技术的人编写一个小工具,例如程序员,工程师等.由于这些工具通常会随着时间的推移而快速改进,我知道会有未处理的异常并且用户不会介意.我希望用户能够向我发送回溯,以便我可以检查发生了什么并可能改进应用程序.
我经常做wxPython编程,但最近我做了一些Java.我已经TaskDialog上课了Thread.UncaughtExceptionHandler(),我对结果非常满意.特别是它可以捕获和处理来自任何线程的异常:


我在wxPython中做了类似的事情很长一段时间.然而:

这是Java和wxPython的代码,所以你可以看到我做了什么:
Java的:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.JButton;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import com.ezware.dialog.task.TaskDialogs;
public class SwingExceptionTest {
private JFrame frame;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException e) {
}
catch (InstantiationException e) {
}
catch (IllegalAccessException e) {
}
catch (UnsupportedLookAndFeelException e) {
}
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) { …Run Code Online (Sandbox Code Playgroud) 我想编写一个混合应用程序,它使用python作为GUI组件,C++模块作为后台服务.
我知道如何使用Python和C++编程,但我找不到一种成熟/好的方法来使它们顺利地协同工作.你能为我们解释一下吗?一个好的文档/教程也非常感谢.