Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在wxpython上,使用Ctrl+;A选择所有项目或使用按钮选择项目_Python_User Interface_Wxpython - Fatal编程技术网

在wxpython上,使用Ctrl+;A选择所有项目或使用按钮选择项目

在wxpython上,使用Ctrl+;A选择所有项目或使用按钮选择项目,python,user-interface,wxpython,Python,User Interface,Wxpython,在wxpython上,是否有任何方法可以使用Ctrl+A选择所有项目,而不是在面板上逐个单击项目本身 或者,如果不可能,我们是否可以设置一个按钮,当单击该按钮时,ListCtrl中的所有项目都将被选中 谢谢这完全取决于您在面板中的内容。 菜单项可以指定一个加速器,即Ctrl+A,那么创建一个在激活时调用的函数,选择任何内容,就完全取决于您的创造力了 当然,对于listctrl查询。您可以编写一个绑定到按钮的函数,该函数使用listctrls函数Select()和GetItemCount() 正如

在wxpython上,是否有任何方法可以使用
Ctrl+A
选择所有项目,而不是在面板上逐个单击项目本身

或者,如果不可能,我们是否可以设置一个按钮,当单击该按钮时,
ListCtrl
中的所有项目都将被选中


谢谢

这完全取决于您在面板中的内容。
菜单项可以指定一个
加速器
,即Ctrl+A,那么创建一个在激活时调用的函数,选择任何内容,就完全取决于您的创造力了

当然,对于listctrl查询。您可以编写一个绑定到按钮的函数,该函数使用listctrls函数
Select()
GetItemCount()

正如@所说,可以使用wx.Accelerators实现control+a,下面是基于其代码的python3示例:

导入wx
类MyForm(wx.Frame):
定义初始化(自):
wx.Frame.\uuuuu初始化(self,None,wx.ID\u ANY,“列表控件选择”)
panel=wx.panel(self,wx.ID_ANY)
self.text=“Timbuktoo”
self.list_ctrl=wx.ListCtrl(面板,大小=(750350),
style=wx.LC\u报告
|wx.BORDER_凹陷
)
sizer=wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.list\u ctrl,0,0,5)
面板设置器(施胶器)
#添加绑定到OnSelectAll的全选加速器处理程序
ID\u SELECT\u ALL=wx.NewIdRef(计数=1)
self.Bind(wx.EVT\u菜单,self.OnSelectAll,id=id\u全选)
自设置加速表(wx.AcceleratorTable([
wx.AcceleratorEntry(wx.ACCEL\u CTRL,ord('A'),ID\u SELECT\u ALL)
]))
self.list\u ctrl.InsertColumn(0,'主题',宽度=100)
self.list\u ctrl.InsertColumn(1,'Due',width=150)
self.list\u ctrl.InsertColumn(2'位置',宽度=300)
对于范围(10)内的i:
self.list_ctrl.InsertItem(i,f“Line{i}”)
自我列表\控制设置项(i,1,“2020年6月12日”)
self.list\u ctrl.SetItem(i,2,self.text)
self.text=self.text+“1”
def OnSelectAll(自身、事件):
对于范围内的i(self.list\u ctrl.GetItemCount()):
self.list\u ctrl.Select(i)
如果名称=“\uuuuu main\uuuuuuuu”:
app=wx.app()
frame=MyForm()
frame.Show()
app.MainLoop()

是的,朱利亚诺,很有用!我倾向于忘记
AcceleratorTable
,因为我更喜欢在菜单或某种按钮中有视觉提示,但当然,用一句古老的谚语来说,有很多方法可以剥猫皮。@RolfofSaxony,true,我添加此答案是因为我需要应用程序中的键盘快捷键,而且我发现的所有示例都太旧,无法使用,或者不太适合ListCtrl+加速器,但感谢您提供的原始答案,它引导我找到了我需要的答案:)
import wx
class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "List Control Select")
        panel = wx.Panel(self, wx.ID_ANY)
        self.index = 0
        self.text = "Timbuktoo"
        self.list_ctrl = wx.ListCtrl(panel, size=(750,350),
                         style=wx.LC_REPORT
                         |wx.BORDER_SUNKEN
                         )
        self.list_ctrl.InsertColumn(0, 'Subject', width=100)
        self.list_ctrl.InsertColumn(1, 'Due', width=150)
        self.list_ctrl.InsertColumn(2, 'Location', width=300)

        btn = wx.Button(panel, label="Select All")
        btn.Bind(wx.EVT_BUTTON, self.OnSelect)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
        for i in range(10):
            self.add_line()

    def OnSelect(self,event):
        for i in range(self.list_ctrl.GetItemCount()):
            self.list_ctrl.Select(i)

    def add_line(self):
        line = "Line %s" % self.index
        self.list_ctrl.InsertItem(self.index, line)
        self.list_ctrl.SetItem(self.index, 1, "12/06/2020")
        self.list_ctrl.SetItem(self.index, 2, self.text)
        self.index += 1
        self.text = self.text+"1"

if __name__ == "__main__":
    app = wx.App()
    frame = MyForm()
    frame.Show()
    app.MainLoop()