【发布时间】:2014-12-17 11:36:22
【问题描述】:
我正在编写一个 Vala 应用程序,并在其中使用 Gtk.ToggleToolButtons'。我希望它们表现得像单选按钮,例如单击其中一个按钮时,应将其他按钮设置为非活动状态。问题是,我不知道该怎么做。
我尝试过这样做:
public void uncheckButtonsExcept(string notUncheck)
{
feedButton.active = (notUncheck == "feed");
userButton.active = (notUncheck == "self");
photoButton.active = (notUncheck == "photo");
searchButton.active = (notUncheck == "search");
newsButton.active = (notUncheck == "news");
}
并且这个函数在每个按钮的clicked回调中运行,像这样:
searchButton.clicked.connect(() => {
uncheckButtonsExcept("search");
});
但是,当我单击按钮时,程序会出现段错误。
我试图将我的所有函数包装到Idle.add() 中(因为在我的程序在重绘不在主线程中的小部件后出现段错误时我已经遇到了问题),如下所示:
public void uncheckButtonsExcept(string notUncheck)
{
Idle.add(() => {
feedButton.active = (notUncheck == "feed");
userButton.active = (notUncheck == "self");
photoButton.active = (notUncheck == "photo");
searchButton.active = (notUncheck == "search");
newsButton.active = (notUncheck == "news");
return false;
});
}
在此之后我的程序不是段错误,而是冻结。
我尝试使用set_active(),但它也激活了toggled() 信号,我不想这样做。
那么,问题来了:如何在不激活clicked 回调的情况下设置按钮状态?
【问题讨论】:
-
为什么不想激活
toggle信号? -
@ace 因为它会在我两次单击按钮时做出反应(当我实际单击它并更改
active状态时)(这不是我想做的)。 -
你为什么不加入一些条件,这样代码只有在检查时才会被执行?例如。如果按钮被选中;然后取消选中其他按钮;并在您的取消选中功能中:如果按钮被选中并且 notCheck != "feed";然后 set_active(false); (对不起,我不认识 Vala,无法给出语法上有效的例子)
-
@ace 你的评论让我知道如何解决它:stackoverflow.com/a/27548757/1206421
标签: radio-button gtk vala