python - wxpython组合框值参数未正确设置初始值
问题描述
我正在用下面的代码编写一个脚本,但它不起作用,因为设置value
参数应该在组合框上设置一个初始值,如代码和图片所示。有人对此有解决方案吗?
self.algorithms = {...}
self.algorithm = wx.ComboBox(self.pnl, value='--Select--', choices=list(self.algorithms.keys()),
style=wx.CB_READONLY)
self.algorithm.SetPosition((50, 80))
解决方案
keys
如果字典中的 是字符串,那应该可以工作。
如果不是,您应该从以下位置收到错误:
choices=list(self.algorithms.keys())
choices
应该list
是strings
在这种情况下尝试:
choices=[str(k) for k in self.algorithms]
反而。
编辑风格wx.CB_READONLY
字符串必须在组合框选项列表中
这不是其他样式的情况
因此,如果将索引用于该选择,则必须小心
这是一些应该可以工作的简单代码:
import wx
class Myframe(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.my_choices = {"Choose a sport":0,"Board Sports":1,"Ball Sports":2,"Fight Sports":3}
#self.my_choices = ["Board Sports","Ball Sports","Fight Sports"]
self.my_subchoices = [[],["Skate boarding","Surfing","Ski boarding"],["Football","Cricket","Rugby"],["Boxing","Wrestling","Karate"]]
pan = wx.Panel(self)
self.cbx = wx.ComboBox(pan, -1, value = "Choose a sport", pos=(10,30), size=(300,30),choices=list(self.my_choices),style=wx.CB_DROPDOWN | wx.CB_READONLY )
self.cbx.Bind(wx.EVT_COMBOBOX, self.on_selection)
def on_selection(self, evt):
Choice = self.cbx.GetSelection()
msg = ""
#
# Ignore choice 0 because of style wx.CB_READONLY or include a blank entry
# for choice 0 in my_subchoices
for x in self.my_subchoices[Choice]:
msg += x+"\n"
self.cbx.SetToolTip(msg)
if __name__ == "__main__":
App = wx.App()
Myframe().Show()
App.MainLoop()
推荐阅读
- dart - Flutter Global 失去价值
- android - 发送套接字时出错 [WinError 10061] 无法建立连接,因为目标机器主动拒绝了从 Python 到 Android 的 Socket
- python - 在 3D numpy 矩阵中为给定值绘制表面轮廓
- regex - 使用正则表达式测试字符是否存在
- rust - 如何检查两个引用变量是否借用了同一个对象?
- c# - 如何将模板导入我的 ASP.NET 项目(Visual Studio 2013)
- javascript - 如何在 React 中实现 Cloudinary 上传小部件?
- c# - triggerzone 每帧读取同一个对象
- conv-neural-network - 训练期间如何处理损失和验证的 NaN 和 0
- ansible - 当条件与 Ansible