我正在开发我的第一个wxpython应用程序。它是comandline实用程序的GUI,需要连接到samba共享。现在我想将菜单中的服务器选择添加为单选按钮。 我使用ConfigParser设置ini文件,该文件同时保存默认服务器的配置 它应该连接的服务器。
现在我想取消选择所有单选按钮,如果没有选择默认服务器且程序没有连接 启动。
以下是我将RADIO_ITEMS添加到菜单的代码: (我知道这可能会做得更好,但我仍在学习,我很高兴它的工作,欢迎任何推荐)
# Create a List to be used as variables
for i in range(1,7):
list.append('radiobutton{}'.format(str(i)))
# Append the RadioButtons
for i in range(1,7):
num = str(i)
# Load Sections of ini (every server has its own section, up to 6 are allowed)
config_sec = Config.sections()
if filter(lambda x: 'Server{}'.format(num) in x, config_sec):
name = LoadConfig("Server{}".format(num))['connection name']
list[i] = wx.MenuItem(self.wpkg_server, 400+i, name, 'Connect to Server: {} ?'.format(name), kind=wx.ITEM_RADIO)
self.wpkg_server.AppendItem(list[i])
# Get Default server setting from ini
default_server = LoadConfig("Options")['default server']
# Try if default_server is a valid number that can be converted to int
try:
int(default_server)
except ValueError:
# This is the part not working, if there is no default server set i want to uncheck
# deselect all added items but with no luck.
# the first item is always selected if no default server was set
list[i].Check(False)
else:
if i == int(default_server):
# Selecting the correct radio button if it is the default server works fine
list[i].Check(True)
self.statusbar.SetStatusText('Connected to Server: {}!'.format(name))
答案 0 :(得分:0)
[menu.Check(False) for menu in my_list]
不要使用list作为变量名,我也希望你能用这段代码得到一个IndexError ....
答案 1 :(得分:0)
你是正确的Sonic,看来你必须在菜单RadioItems中检查一些东西,所以添加一个假人是一个解决问题的实用方法,但有一种更简单的方法来设置所选项目。例如
b_m = wx.Menu()
b_m.AppendRadioItem(1," Full Screen On")
b_m.AppendRadioItem(2,"全屏关闭")
self.Bind(wx.EVT_MENU,self.OnFScrOn,id = 1)
self.Bind(wx.EVT_MENU,self.OnFScrOff,id = 2)
b_m.Check(2,True)
最后一行将菜单项ID 2设置为True
我也期望索引有问题
list[i].Check(False)
正如Joran上面提到的那样