我在使用我的应用程序创建下拉GTK日历小部件时遇到了麻烦。
目的:
基本上我想要一个文本组合框,您可以输入日期,例如2011/02/01,它会自动格式化日期。这部分不是问题,另一部分是下拉日历方面,您可以单击组合框旁边的下拉按钮,它会下拉到日历中,您可以在其中选择日期。
问题/半解决方案:
我花了一些时间用Ruby GTK(真的是Gnome绑定)来解决这个问题,下面是我提出的一些解决方案。
基本上我创建了一个文本框,然后创建了一个按钮并给它“向下箭头”来模拟一个组合框的下拉按钮,它看起来没问题,不是世界上最伟大的东西。
对于实际的日历小部件,我将创建一个无边框/无标题的对话框并将日历小部件嵌入其中,并将其放置在下拉组合框列表将出现的文本框下方。
当用户选择日期时,它将被取消。
然而,我提出的上述解决方案有几个问题:
无边框/无标题对话框仍会创建正在任务栏上显示的内容...
如果用户按下“ctrl + q”退出应用程序,由于日历小部件具有焦点,因此键绑定永远不会进入父窗口。
如果我移动父窗口,日历小部件就会卡在空中。
如果我点击其他地方或在文本框中输入日期,日历小部件不会消失,我必须从日历小部件中选择一个日期......
总之,我想就如何做一个正确/更好的方式来做日历下拉小部件提出一些建议或建议?我宁愿把这个纯粹保留在GTK中,而不需要像Gnome那样的其他小部件......
答案 0 :(得分:2)
组合框为其下拉菜单选择GtkListStore
。您可以实现一个自定义GtkCellRenderer
,在其单元格中将日期呈现为GtkCalendar
,然后在列表存储中只有一个项目(日期)。当您下拉组合框时,将显示日历,用户可以选择日期,然后您可以从列表商店中读取日期。