【问题标题】:How to click multiple times on QRadioButton but only run function once?如何在 QRadioButton 上单击多次但只运行一次功能?
【发布时间】:2016-06-20 23:26:12
【问题描述】:

我有 2 个单选按钮。第一个 radio1 连接到函数 func(),在此函数内部将按钮 pushButton 连接到另一个函数 print_me()

这是被剥离的代码:

radio = self.dockwidget.radioButton
radio.clicked.connect(func)

def func():
    # Connect pushButton to "print_me" function
    connect = self.dockwidget.pushButton
    connect.clicked.connect(print_me)

def print_me():
    print 'Connected'

当用户单击radio1,然后单击pushButton 时,会打印一条消息。问题是如果用户点击radio 10 次,然后点击pushButton,消息也会被打印10 次。或者如果用户点击radio1,然后点击radio2,再点击radio1,仍然会打印两次消息。

有没有办法防止这种情况发生,以便在单击任一单选按钮时只打印一次消息?

【问题讨论】:

  • 你可以使用一个全局变量来存储函数是否已经被调用。
  • @Ashafix - 谢谢,我会检查一下,看看情况如何 =)
  • 小心全局变量的想法。你确定你只希望函数在程序的整个执行过程中运行一次吗?如果单选按钮被清除(例如,通过单击组中的另一个按钮)然后再次单击,您是否希望该功能第二次运行?如果用户离开该表单,然后又回到该表单会怎样?
  • @nephtes - 谢谢,是的,我确定我只想运行一次。我确实有 2 个按钮,当一个被点击时,另一个被清除。但无论点击哪一个,我只需要它运行一次。即使用户导航到另一个表单:)

标签: python qt-designer qpushbutton qradiobutton


【解决方案1】:

有一个全局变量并将其设置为TrueFalse。然后在代码中添加if 语句(在本例中,全局变量名称为clicked_radio_button):

radio = self.dockwidget.radioButton
radio.clicked.connect(func)
clicked_radio_button = False #Set global variable
def func():
    if clicked_radio_button == False:
         # Connect pushButton to "print_me" function
         connect = self.dockwidget.pushButton
         connect.clicked.connect(print_me)
         clicked_radio_button = True #Set global variable to True
    else:
        pass #Do nothing if already pressed

def print_me():
    print 'Connected'

【讨论】:

  • 抱歉,我应该在我的问题中提到我有 2 个单选按钮。如果有一个,这很好用,但如果用户在 2 个单选按钮之间切换,则不会打印任何消息,因为已经设置了全局变量。是否可以在函数内部插入全局变量?
  • 设置两个全局变量怎么样?然后将if 语句设置为同时匹配 =]
  • 随时!快乐编码 =]
猜你喜欢
  • 2020-11-14
  • 2019-11-12
  • 1970-01-01
  • 2016-05-30
  • 2018-05-16
  • 2021-02-20
  • 2021-08-24
  • 2015-08-13
  • 1970-01-01
相关资源
最近更新 更多