0

我有三个按钮。单击时的每个按钮都会向端口 58888 发送一个命令,该端口有一些工作,一旦工作完成,基本上该特定按钮应在 5 分钟后再次按下。

知道如何阻止按钮吗?所以有人不能在那个按钮上产生洪水一段时间?

  button = gtk.Button("a")
  button.connect("clicked" , self.on_the_fly("a") , None)
  bbox.add(button)

  button = gtk.Button("v")
  button.connect("clicked" , self.on_the_fly("v") , None)
  bbox.add(button)

  button = gtk.Button("b")
  button.connect("clicked" , self.on_the_fly("b") , None)
  bbox.add(button)

按钮使用的方法:

  def on_the_fly(self, input):

    logging.debug(  'Clicked at x={0}, y={0}' )

    try:

      if self.myname.startswith("enduser"):
        logging.debug("reconnect")

      else:

        if input.startswith("a"):

          command = "r0x01"
          client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          client_socket.connect(("localhost", 58888))
          client_socket.send(command)
          client_socket.close()

        elif input.startswith("v"):

          command = "r0x02"
          client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          client_socket.connect(("localhost", 58888))
          client_socket.send(command)
          client_socket.close()

        elif input.startswith("both"):

          command = "r0x03"
          client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          client_socket.connect(("localhost", 58888))
          client_socket.send(command)
          client_socket.close()

        else:

          print "nothing"

        subprocess.Popen(["/var/tmp/runme.sh"], stdout=subprocess.PIPE)

    except Exception, err:
      logging.debug(  err )
      pass
4

1 回答 1

1

您需要对按钮“不敏感”(Gtk 表示“停用”、“禁用”或“灰显”),然后设置一个计时器,然后在 5 分钟后重新敏感。

这意味着您希望将按钮本身(而不仅仅是字母)传递给命令函数。

向您展示如何做到这一点比它应该做的要难一些,因为您的命令功能已经错了。您在每次调用 中调用,并将按钮连接到返回值 ( )。因此,您的程序在启动时调用了 3 次,然后在您单击按钮时记录一个关于不可调用的异常。你想要的是以下之一:self.on_the_flyconnectNoneon_the_flyNone

button.connect("clicked", self.on_the_fly, "a")

button.connect("clicked", lambda: self.on_the_fly("a"), None)

因此,您传递按钮小部件的方式也是:

button.connect("clicked", self.on_the_fly, ("a", button))

button.connect("clicked", lambda: self.on_the_fly("a", button), None)

然后,您像这样更改on_the_fly方法:

def on_the_fly(self, input, widget):
    logging.debug(  'Clicked at x={0}, y={0}' )
    widget.set_sensitive(False)
    gtk.timeout_add_seconds(5*60, widget.set_sensitive, True)
    # rest of function
于 2013-10-09T22:50:38.723 回答