让wxPython成为标准模块?

嗨,Diez和All,
您是否介意解释"为什么"找到它 *屁股 *?我只是问
显然是出于好奇.我对wxpython有偏见
不会特别对此线程发表任何评论,但我很好奇
知道为什么有些人发现它"丑陋"或"坏"或其他.它有
当然,它自己的错误和缺少功能,但它是
竞技场的主要GUI球员与Pyqt和Pygtk一起.
安德里亚.
"想象力是反对现实战争的唯一武器." http://xoomer.alice.it/infinity77/

# 回答1


在6月12日,9:55*AM," Andrea Gavana" 您是否介意解释"为什么"找到它 *屁股 *?我只是问
显然是出于好奇.我对wxpython有偏见
不会特别对此线程发表任何评论,但我很好奇
知道为什么有些人发现它"丑陋"或"坏"或其他.它有
当然,它自己的错误和缺少功能,但它是
竞技场的主要GUI球员与Pyqt和Pygtk一起.
安德里亚.
"想象力是反对现实战争的唯一武器." http://xoomer.alice.it/infinity77/

我也很好奇.我喜欢wxpython,因为小部件实际上是"外观"
他们应该以跨平台方式(大多数情况下)的方式
因为他们使用OS的实际小部件集. TKINTER绘制
一切都可以在窗户上看起来很奇怪,尽管我已经看到
一些使用它的非常漂亮的程序.
当然,WX并没有真正做"皮肤",因此在这方面可能会
被安德里亚的其他一些工具包所受到的阻碍
提及.我真的不知道.
-------------------------------
迈克·德里斯科尔(Mike Driscoll)
博客:http://blog.pythonlibrary.org
Python扩展建筑网络:http://www.pythonlibrary.org

# 回答2


在文章中
" Andrea Gavana" 您是否介意解释"为什么"找到它 *屁股 *?
我的猜测是"屁股"是一种口语
意思是"精美可爱".
- -
David C. Ullrich
# 回答3


Andrea Gavana Schrieb:
您是否介意解释"为什么"找到它 *屁股 *?我只是问
显然是出于好奇.我对wxpython有偏见
不会特别对此线程发表任何评论,但我很好奇
知道为什么有些人发现它"丑陋"或"坏"或其他.它有
当然,它自己的错误和缺少功能,但它是
竞技场的主要GUI球员与Pyqt和Pygtk一起.
为了好奇:不是外观(尽管我更喜欢Linux上的KDE
Gnome,这是QT/GTK的东西,因此也会影响WX的外观和感觉)
但是代码和设计师.我被QT和Apple宠坏了
我猜接口构建器.
但是正如我所说:这是个人意见,我很清楚
QT(许可和成本),当然还有IB的局限性(仅限OSX)
diez
# 回答4


在2008-06-14,Diez B. Roggisch

[...]
我从未使用过任何设计师,但我同意100%
wxpython代码很讨厌. wxpython有一个非常不底的
IMO很难使用API​​. API不是真的
罗宾·邓恩(Robin Dunn)的错:wxpython是一个非常薄的包装纸
wxwidgets,因此它在很大程度上保留了相同的讨厌的低级C ++
Wxwidgets拥有的API.我认为wxpython是
在一些自动化的伪造(la秋千)中产生.那里有
曾尝试将WXPYTHON包裹在一个清洁室中,更多
Pythonic API,但他们的成功有限(蜡是一个
我能想到我的头顶).
- -
格兰特·爱德华兹·格兰特·尤!如果我有Q尖,我
可以防止崩溃
visi.com谈判!!

# 回答5


哈尔钦!
格兰特·爱德华兹(Grant Edwards)写道:
[...]
我从未使用过任何设计师,但我同意100%
wxpython代码很讨厌. wxpython有一个非常不pythonic的API
这就是IMO,难以使用.
我知道这样的请求可能会启动永无止境的线程,但是我会
真的很喜欢知道您的意思.我几乎没有gui
当我开始使用wxpython时,经验很高兴
我.
确实,来源的美学对我来说很重要
程序员,我不喜欢Wxpython的骆驼盒和Getters和
设定器.但是,即使是许多(如果不是大多数)核心Python模块也没有
尊重PEP8或不使用当前语言功能.
此外,传递功能名称作为字符串也是疣, *i *
根本不了解信号和插槽.也许我们应该
接受GUI工具包中没有银弹,任何
四大之间的个人喜好只是一个问题
品尝.这种"非pythonic"的事情是任意和不公平的措辞
我的意见.
tschö,
托斯滕.
- -
Torsten Bronger,Aquisgrana,Europa Vetus
jabber ID:to to to hydeide*******@jabber.rwth-aachen.de
# 回答6


在2008-06-14,Torsten Bronger
我知道这样的请求可能会启动永无止境的线程,但是
我真的很想知道您的意思.
[...]
好吧,如果我们希望这个线程永远不会结束,我最好把
我的答案有点戏剧性的夸张,所以这里...;)
IMO,关于WXPYTHON的一些" Un-Pythonic"的事情是:
1)窗口ID号.
"您不需要知道它的用途,只需通过-1即可."
他们在用户级别的存在感到错误.
有人告诉我,大约3个Uber熟练学
wxwidgets程序员窗口ID在某些罕见的地方可能很有用
情况.同时,其他所有人都在工作
"正常"条件必须通过无用的位置
参数每次实例化小部件时.那东西
只有在特殊情况下才有用
在例外情况下可见.
2)"标志"参数.
" 1975年打电话给他们,他们希望自己的位面罩回来."
将几十个不同的捣碎在一起
完全无关的属性到"标志"参数 ter
是C/汇编语言编程中剩下的一个技巧
在计算机上,记忆尺寸是KB的测量.相当
而不是一堆碎片来制作
窗户表演您想要的方式,应该设置
单独命名对象属性或通过可选,
命名为类方法的参数.
3)父母/子树
"唯一比窗口ID不太理解的东西"
我一直在写WXPYTHON应用程序已有9年了,并且
我仍然只有一个非常模糊的想法
树是.我认识的每个人都使一切
他们放入申请框架的第一个面板的孩子.
指定窗口ID以外的窗口ID的人
可能会使用复杂的父母/子树作为东西.
4)SIZERS
"他们就像阿司匹林一样 - 他们工作,但没人知道什么"
好的,这有点过时了,因为我似乎还记得
有人终于弄清楚了阿司匹林的工作方式
几年前. Sizers的工作方式似乎很复杂
与我使用过的其他GUI工具包相比
复杂性似乎没有提供任何额外的功能.
在我看来很复杂的一件事
在控制哪个对象"伸展"什么轴时
窗口大小.我已经使用了很多年了,
但是我从来没有发现他们超过90%的人.
每次我写一个wxpython应用程序时,我都会感到惊讶
按照调整窗口的行为,必须
花一些经过试用的时间与Sizer一起摆弄
参数.我不记得在tkinter中这样做
或托里:事物"刚刚起作用".
5)结合
"什么?当您单击它时,您想要一个_did_的按钮吗?"
在过去的几年中,绑定实际上有所改善.
它并不像以前那样晦涩,但仍然是
不需要的额外明确步骤.它应该
仅采用一行代码来创建一个按钮小部件
单击指定的可呼叫.某物
像这样:
b = wx.button(label =" click me",action = mycallable)
相反,您曾经必须创建一个按钮,然后致电
某些实用程序在某些其他对象中功能绑定
按钮到可呼叫(IIRC这是一个窗户的地方
可以使用ID).现在,该按钮实际上有一个方法
您可以使用.这仍然是额外的一步...
6)成千上万的wx.upper_case_integer_hex_constants
"毕竟,一切实际上只是一个基础2个整数."
由于我们没有对象或属性或命名
参数或字符串,所有信息必须传递到
并以任意整数常数为止.这
那种API真的很棒
多功能性:您可以将任何值传递给任何地方!通过
像素中的宽度窗口属性是
预期的?没问题!
好吧,我正在运行的构建已经完成,所以这可能是
足够的...
- -
格兰特·爱德华兹·格兰特·尤!那些人看
就像唐尼一样
visi.com 玛丽·奥斯蒙德!
# 回答7


哈尔钦!
格兰特·爱德华兹(Grant Edwards)写道:
当我开始使用wxpython时,有一个新引入的
wx.id_any,您可以给出而不是-1.我的眼睛过滤了
几个小时后,就像"自我"一样.
好吧,我喜欢旗帜,而且我看不到它们是个性化的.我
找到它们产生的非常清晰的代码.
请参阅wx.id_any.
也许是因为我来自Tex/latex,所以我立即喜欢Sizers.
他们对我有好处.
您是对的,这可以更好.太明确了.
但是,如果您真的讨厌该结构,则可以定义
捷径.
感谢您的详尽解释,但我认为您
点很小.此外,其中大多数都是品味问题.
我认为这不是因为您找不到方便的Sizers,或者
有些零件太明确了,您可以说WXWIDGETS是无关的.
我宁愿给您的印象,您喜欢简洁,那就是
完全可以,但是有不同的事情.
我同意更改命名约定并利用
属性会增加Pythonics,但已经很高
等级.
tschö,
托斯滕.
- -
Torsten Bronger,Aquisgrana,Europa Vetus
jabber ID:to to to hydeide*******@jabber.rwth-aachen.de
# 回答8


格兰特·爱德华兹(Grant Edwards)写道:
我知道这样的请求可能会启动一个永无止境的线程,但是我真的很想知道您的意思.

[...]
好吧,如果我们希望这个线程永远不会结束,我最好把
我的答案有点戏剧性的夸张,所以这里...;)
(公然的自我促进警告:我是达博的创始人之一,它是
听起来您可能想看看它,给定下面的评论)
Dabo是WXPYTHON周围的不错的包装纸,其中包括
带有ID号.有几个地方(WXMENU事件,一个)
您需要处理Window ID的位置,但Dabo不会公开
用户,它可以按照应有的方式处理它.
Dabo将属性用于一切,包括单个样式
位.它处理在正确的位置使设置使其"仅
作品"例如,用户不需要知道,例如,仅标志x
全班完全实例化或反之亦然.
一旦实例化,可以在对象上设置属性,并发送到
构造函数,或在子类中设置:
#通过实例化基本框来创建文本框
#并将属性值发送给构造函数:
txt = dabo.ui.dtextbox(self,value =" hello",fontbold = true)
#调整其他一些属性:
txt.fontitalic = true
txt.backColor =" Yellow"
每个容器对象都需要了解其子女,每个对象
对象需要了解其父母.因此,在达博,我们有2个属性:
孩子和父母.
塞萨斯在达博也有些复杂.或者,不是
复杂,但是创造它们的代码很快就变得很悠闲.
vs = dabo.ui.dsizer(" v")
hs = dabo.ui.dsizer(" h")
hs.append(dabo.ui.dlabel(self,caption =" name:"))
hs.append(dabo.ui.dtextbox(self))
vs.append(HS)
da BO将事件绑定作为对构造函数的参数,例如:
Def OnButtonHit(Self,EVT):
打印"按钮命中"
但是= dabo.ui.dbutton(self,onhit = self.onbuttonhit)
hit是默认事件,您使用"动作".对于按钮,它发生
当用户推动它时.还有许多其他事件,例如
MouseHover,空闲等,您可以在
使用上面的语法使用构造函数.
我们还进行自动事件绑定:
类myTextbox(dabo.ui.dtextbox):
valuechanged(自我,evt):
打印"价值更改"
实例化时,此文本框会自动运行onvaluechang
当价值变化时处理程序,即使我们从未明确进行
捆绑.
(自动事件绑定也可以轻松关闭).
全球WX名称空间中的所有这些标志都是IMO最大的疣之一.
但是最后,wxpython是python的最佳GUI工具包,到目前为止
这就是为什么我们在登上Dabo时选择它的原因.我们肯定做了
正确的选择.
我想我现在也会结束无耻的自我宣传.
保罗

# 回答9


在2008-06-14,Paul McNett [...]好吧,如果我们希望这个线程永不结束,我最好将小戏剧性的夸张的夸张伸入我的答案中,所以...;)

(公然的自我促进警告:我是达博的创始人之一,它是
听起来您可能想看看它,给定下面的评论)
是的!达博是我想记住的另一个.最后
我看上去达博似乎比蜡更好的时候了
曾是.
我已经使用了9年了. :)我几乎总是可以
使其正常工作,结果看起来是Windows用户和
对Linux用户的"本地足够" ...
- -
格兰特·爱德华兹·格兰特·尤!我评分为PG-34!

visi.com

# 回答10


在2008-06-14,Torsten Bronger
当我开始使用wxpython时,有一个新引入的
wx.id_any,您可以给出而不是-1.我的眼睛过滤了
几个小时后,就像"自我"一样.
定义-1的新名称只是画疣
不同的颜色.
好吧,我喜欢旗帜,而且我看不到它们是个性化的.我
找到它们产生的非常清晰的代码.
您是说让用户或一堆
位掩码并将结果传递为整数是一种常见的方式
Python功能/对象允许用户转动可选
打开和关闭的功能?
您必须使用与我不同的python.我所看到的
在标准库模块中用于该模块的命名
具有有用默认值或单个对象的参数
属性.我认为唯一的例外是低水平
允许直接的" OS"和"套接字"模块中的例程
访问诸如unix libc呼叫之类的内容,例如open(),creat(),
read(),write()和BSD插座API.
请参阅wx.id_any.
我看不出两者彼此有什么关系,但也许
那就是我所有问题的根源.
也许是因为我来自Tex/latex,我喜欢 塞人
立即地.他们对我有好处.
我也来自Tex/latex,在WX之前,我花了一点
使用Tex遵循的Trastle GUI小部件的时间
几乎完全完全是盒装范式.我想我找不到WX
Sizers的工作非常类似于Tex/latex盒子.
您是对的,这可以更好.太明确了.
但是,如果您真的讨厌该结构,则可以定义
捷径.
我愿意.我子级wx.button.用户必须这样做
获得99.999%的基本功能
小部件的用例.如果有目的,则明确是可以的.我
看不到需要第二行代码的目的
将一个按钮绑在可可的情况下.
感谢您的详尽解释,但我认为您
点很小.
他们很少,因为他们不会阻止您写作
有效的程序,但它们并不较小,因为他们
不必要地增加用户的工作量
提供任何利益.它们是错误的来源.
也许一对夫妇只是不好的设计决定
思考而不是"非pythonic". Otoh,我考虑
那是很好的,设计精良的是
python的特征,所以不是没有pythonic的东西.
我认为最常见的用例应该用
用户必须完成至少"额外"的内容.它是
只是不是Pythonic要求用户指定默认值
对于x,y,z,当x,y,z的非默认valus仅在1中使用
10000的案例.在Python中,您使用命名参数
默认值.您不使用位置参数,然后
告诉用户"是的,我知道这几乎一直无用,
因此,如果您想要默认行为,只需通过A -1即可.你
不必特别要求默认行为.你
只能要求非默认行为.
我猜我对" Pythonic"的看法有很大不同.我
也不认为C ++图书馆喜欢
WXWIDGETS的API不是很好.
- -
格兰特·爱德华兹·格兰特·尤!我滑过一个
在附近的核废料垃圾场
visi.com佐治亚州亚特兰大!
# 回答11


格兰特·爱德华兹(Grant Edwards)写道:
[...]
我从未使用过任何设计师,但我同意100%
wxpython代码很讨厌. wxpython有一个非常不底的
IMO很难使用API​​. API不是真的
罗宾·邓恩(Robin Dunn)的错:wxpython是一个非常薄的包装纸
wxwidgets,因此它在很大程度上保留了相同的讨厌的低级C ++
Wxwidgets拥有的API.我认为wxpython是
在一些自动化的伪造(la秋千)中产生.那里有
曾尝试将WXPYTHON包裹在一个清洁室中,更多
Pythonic API,但他们的成功有限(蜡是一个
我能想到我的头顶).
蜡似乎没有保持
自2004年以来.
科林·W.
# 回答12


哈尔钦!
格兰特·爱德华兹(Grant Edwards)写道:当我开始使用wxpython时,有一个新的introducedwx.id_any 您可以给而不是-1.几个小时后,我的眼睛像"自我"一样过滤了.

定义-1的新名称只是画疣不同
颜色.
我们在谈论美学.在那里,颜色很重要. ;-)好吧,我喜欢旗帜,而且我看不到它们是个性化的.如果代码,它们产生的代码非常清晰.

您是说让用户或一堆
位掩码并将结果传递为整数是一种常见的方式
Python功能/对象允许用户转动可选
打开和关闭的功能?
"常见"没关系.易读性和实用性.我
甚至在自己的模块中使用标志,尽管我与python"长大"
2.4.我没有看到更好的选择. " a+"等
内置open()函数当然不是.感谢您的详尽解释,但我认为您的目的很小.

他们很少,因为他们不会阻止您写作
有效的程序,但它们并不较小,因为他们
不必要地增加用户的工作量
提供任何利益.
您可以随时更短.但是我认为这不是
正确设计的正确方法.毕竟,一个与
您描述的行为不会通过
大量.
但是,我发现最终的源代码非常清晰. YMMV,
但是,这再次不是pythonics的问题.
我不这么认为.你是什​​么意思?至少,我只能想到
在第一次运行中将变得明显的虫子. (其他
单词,仅仅拼写错误.)
我认为最常见的用例应该用
用户必须完成至少"额外"的内容.它是
只是不是Pythonic要求用户指定默认值
对于x,y,z,当x,y,z的非默认valus仅在1中使用
10000的案例.在Python中,您使用命名参数
默认值.
但是wxpython确实使用了关键字参数和默认值,只是不是
在所有地方,您都希望成为它.
我猜我对" Pythonic"的看法有很大不同.我
也不认为C ++图书馆喜欢
WXWIDGETS的API不是很好.
我曾经在切换到Python之前使用C ++,但我看不到任何
wxpython中的C ++.如果您不喜欢某些事情,那没关系,但是
请不要将标签" Un-Pythonic"放在上面
很少有模块有Pythonic. (甚至哪个
取决于情人.)
tschö,
托斯滕.
- -
Torsten Bronger,Aquisgrana,Europa Vetus
jabber ID:to to to hydeide*******@jabber.rwth-aachen.de

# 回答13


在2008-06-14,Torsten Bronger
"常见"没关系.
是的,它确实. " Python中的常见"是定义" Pythonic"的原因.
是的,但是有一些清晰易用的方法可以做事
在Python编程中通常不使用(也不容易)
因此,尽管很清晰
实际的.有一点练习和汽车 E,功能
前缀通用(A-LA方案)中的编程都可以实用
而且清晰可见,但它仍然不是Pythonic.
我同意" r"" w"" a"值传递给了open()
功能也是未pythonic.就像unpythonic的功能
wxpython,它们直接从基础C/C ++继承
图书馆.如果是" a+",则来自标准
fopen()函数.
您可以随时更短.但我认为这不是
正确设计的正确方法.毕竟,一个wxpython
您描述的行为不会收缩源代码
大量数量.
" Pythonic"并不总是意味着短.这意味着(imo)的东西
例如使用可选参数和对象属性来控制
功能和对象的可选行为.
我不这么认为.你是什​​么意思?
因为某些标志仅在某些情况下使用,所以
但是没有办法强制(甚至指示)使用这种用法
用户.如果指定不适用的标志,则
在没有警告的情况下被忽略或误解.如果你试试
使用不存在的命名参数或对象
不存在的属性,您会得到异常.每当
可能的编程错误应导致异常或语法
错误,不是奇怪的程序行为(这是另一个
我认为是" Pythonic").
但是wxpython确实使用了关键字参数和默认值,只是不是
在所有地方,您都希望成为它.
它确实在某些地方使用它们,但我认为这也是
不一致地被认为是非常" Pythonic".
我曾经在切换到Python之前使用C ++,但我看不到
WXPYTHON中的任何C ++.
全球定义的卡车的整个"旗帜"
竞争单个名称空间的整数常数是纯粹的
C/C ++.是用python写的wxwidgets,我保证
不会是这样的方式.
我会说我使用的大多数库是
相当" Pythonic".
- -
格兰特·爱德华兹·格兰特·尤!我想知道是否有
今晚有什么好处吗?
visi.com
# 回答14


哈尔钦!
格兰特·爱德华兹(Grant Edwards)写道:"常见"无关紧要.

是的,它确实. " Python中的常见"是定义" Pythonic"的原因.
然后,我有您的定义.我认为这不会导致
不过,设计好.如有疑问,请选择常见的
Python,但其他特征必须具有更高的优先级.
[...]有了一点练习和关心,功能编程
前缀通用(A-LA方案)既可以实用又清晰,
对于像我这样的只有Python的程序员而言,我是不可辨的,我是
目标听众.我不这么认为.你是什​​么意思?

因为某些标志仅在某些情况下使用,但是
没有办法强制(甚至指示)使用
用户.
相关标志是正交的,因此库可以很好地检测
错误.好的,您可以通过 *非常 *错误的参数,例如告诉
wxpython,这个事件应该有一个确定的按钮,但我发现了
Pro Blem案例人工.
全球定义的卡车的整个"旗帜"
竞争单个名称空间的整数常数为纯C/C ++.
是用python写的wxwidgets吗,我保证那不是
做完的方式.
好吧,当然,它看起来会大不相同
历史记录,但这适用于每个软件.正如我所说,我
我自己的软件包中使用的旗帜,设计了Python 2.4.和我
认为自己是纯粹主义者.因此,有些事情不好或
次优的,但旗帜是个人喜好的问题.
tschö,
托斯滕.
- -
Torsten Bronger,Aquisgrana,Europa Vetus
jabber ID:to to to hydeide*******@jabber.rwth-aachen.de

# 回答15


授予,
在6月14日,3:43*PM,Grant Edwards [...]
好吧,如果我们希望这个线程永远不会结束,我最好把
我的答案有点戏剧性的夸张,所以这里...;)
IMO,关于WXPYTHON的一些" Un-Pythonic"的事情是:

您有许多有效的要点.但是我比另一个更喜欢wxpython
我尝试过的Python GUI工具包,目前,我正在研究一系列
在我的博客上,有关Sizers和其他零件的文章.一些
他们已经在WXPYTHON WIKI中,如果人们认为我的另一个
已经足够好了,我也会添加它们.
如果您有一些常见的GUI布局(或小部件或其他东西)
您希望我尝试,我很乐意尝试创建一个教程
在他们旁边.我承认我不是专家,尤其是与您相比.
您使用的WX比我更长,但是如果我能提供帮助,我
想要.您可以在这里看到我的东西:http://www.blog.pythonlibrary.org/
另外,您可能会看一下Ironpython.我一直在玩它
最近,使用Winforms进行GUI非常容易.和
使用Mono,您将获得一个跨平台套件来启动.

迈克
# 回答16


>" b = wx.button(label =" click me",action = mycallable)
看起来很像Pythonfors60的Appuifw的行为
班级. Frex,菜单:
appuifw.app.menu = [(u'octopus',捕犬(章鱼)),(u'cuttlefish',
捕虫(墨西哥鱼)),(u'squid',((u'humboldt',捕犬(humboldt)),),
(u'giant',捕犬(巨人)),(u'colossal',捕犬(colossal))]]]]]
为您提供一个带有三个选项的菜单,其中最后一个有三个子 -
选项,所有这些都以其价值调用您的捕犬()函数.

标签: python

添加新评论