我想为wx.Panel的背景(SetBackgroundColour)着色,用蓝色到黑色的degradê.
我该怎么做?
这看起来很简单,但我没有找到任何文档.试过&&,哪个不起作用.想要一个这样的按钮:
Button1=wx.Button(self, 5, "abc&abc", (130, 230))
Run Code Online (Sandbox Code Playgroud) 我有:带有图像缓冲区的面板,其中使用Cairo绘制表单.缓冲区就像这里的例子一样实现:http://wiki.wxpython.org/BufferedCanvas
我想:一个线程,它在更新缓冲区时完成所有绘图(在创建/调整大小/缩放时)
问题:解决这个问题的好方法是什么?
我已经尝试在线程中进行绘图本身并得到一个断言错误,因为dc没有完成.我是否必须在线程中创建dc或在哪里?是否有一些关于线程和DC的教程?
编辑:
我尝试将示例与BufferedCanvas结合使用:LongRunningTasks
见这里:http://pastebin.com/X9kqSMKT
有时它会给出X Window系统错误,有时候效果很差
谢谢你的帮助
我注意到标准对话框在Windows和Linux下以不同的顺序显示了一些CANCEL和OK按钮.在Linux下,你会得到"[CANCEL] [OK]",在Windows下,"[OK] [CANCEL]".
我对标准对话框没有问题,但是我的"自定义对话框"必须调整以匹配相同的顺序,这取决于操作系统
我的疑惑:
1.-它似乎存在一个叫做的类wx.StdDialogButtonSizer,但我不确定它应该如何使用.有人可以发布任何工作简单/工作的例子吗?
而"主要问题":
2.-我使用wxglade来"构建"对话框的代码,所以我不确定我是否可以使用StdDialogButtonSizer.有没有办法用给定的顺序定义对话框,并在运行时检查按钮是否遵循正确的顺序并"交换"这两个小部件,如果没有?
谢谢
import wx
import wx.grid as gridlib
########################################################################
class PanelOne(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)
txt = wx.TextCtrl(self)
button =wx.Button(self, label="Save", pos=(200, 325))
button.Bind(wx.EVT_BUTTON, self.onSwitchPanels)
########################################################################
class PanelTwo(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)
grid = gridlib.Grid(self)
grid.CreateGrid(25,12)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(grid, 0, wx.EXPAND)
self.SetSizer(sizer)
########################################################################
class MyForm(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,
"Panel Switcher Tutorial")
self.panel_one = PanelOne(self)
self.panel_two = PanelTwo(self)
self.panel_two.Hide()
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.panel_one, 1, wx.EXPAND)
self.sizer.Add(self.panel_two, 1, wx.EXPAND)
self.SetSizer(self.sizer)
menubar = …Run Code Online (Sandbox Code Playgroud) Python 2.7.3 x64 wxPython 2.8 x64
已经阅读了很多关于python线程和多处理的内容,特别是Doug Hellmann撰写的一些文章,这些文章有很大的帮助.但是,我对一件事感到困惑......
我认为 Python多处理模块或多或少是线程模块的直接替代品,除了args必须是可选择的,但我发现为了不阻止我的GUI,我必须首先创建一个新的线程使用threading.Thread然后使用multiprocessing.Process在该线程中进行多进程.这很有效,而且效果很好,但对我来说似乎有点笨拙.
如果我尝试在没有第一次线程的情况下直接进行多处理,那么我的GUI仍会阻塞,直到多处理作业完成.这是按设计工作,还是我遗漏了多处理模块的基本原理?
如果需要示例,我可以提供它们.
谢谢,
-RMWChaos
要求一个例子......
假设onProcess()由GUI中的按钮触发,这会阻止GUI ...
import time
import multiprocessing as mp
def myWorker(a, b):
time.sleep(0.1)
print '{} * {} = {}'.format(a, b, a*b)
def onProcess(event):
jobs = mp.cpu_count() * 2
a = 5
b = 10
for job in range(jobs):
mp.Process(target = myWorker, args = (a, b,)).start()
Run Code Online (Sandbox Code Playgroud)
虽然这不......
import time
import multiprocessing as mp
import threading as th
def myWorker(a, b):
time.sleep(0.1)
print '{} * {} = …Run Code Online (Sandbox Code Playgroud) 我很好奇并且在过去一小时内一直在阅读使用Python进行GUI开发的内容.在阅读wxPython文档,PyQt,诺基亚Qt的Python绑定以及Tkinter之后,我想到了一个问题.
当我使用Python创建一个控制台应用程序时,它使用嵌入式Python解释器运行(我假设通常不是总是在我的情况下cpython).
所以我想知道,这些"小工具包"是什么情况?
如何执行Python代码以及解释它(或执行它)的代码?
我的Python代码的哪一部分是使用Python解释器解释的?
或者Python代码是否经过词法分析,然后由小部件的工具包解析,然后解释并执行(或在构建期间编译)?
我期待通过Python解释器与Python应用程序(稍微简单易懂)的解释相比较,了解后台发生的事情.
谢谢.
PS.无论哪个天才都认为这个问题值得关闭; 很多人都想知道外部库和系统的内部结构.特别是那些不像它们看起来那么简单的东西.目前在SE上没有任何问题可以解释这一点.
我尝试在下面运行此以下文件,但是没有用。通常必须显示使用库wxPython构建的图形用户界面。
import wx
class GoToClass(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(390, 350))
panel = wx.Panel(self, -1)
font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
font.SetPointSize(9)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
st1 = wx.StaticText(panel, -1, 'Class Name')
st1.SetFont(font)
hbox1.Add(st1, 0, wx.RIGHT, 8)
tc = wx.TextCtrl(panel, -1)
hbox1.Add(tc, 1)
vbox.Add(hbox1, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 10)
vbox.Add((-1, 10))
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
st2 = wx.StaticText(panel, -1, 'Matching Classes')
st2.SetFont(font)
hbox2.Add(st2, 0)
vbox.Add(hbox2, 0, wx.LEFT | wx.TOP, 10)
vbox.Add((-1, 10))
hbox3 …Run Code Online (Sandbox Code Playgroud)