【问题标题】:How to tell if two QPushButtons have been pressed (Python)如何判断两个 QPushButtons 是否被按下(Python)
【发布时间】:2019-09-07 04:39:05
【问题描述】:

当我的两个 QPushButtons 都被按下时,我需要调用一个成员函数。我找不到跟踪它们是否被按下的方法。

当使用 ...clicked.connect(func) 单击任一按钮时,我调用一个函数,并且在该函数中我尝试:1)返回一个值,2)更新一个成员变量。下面我展示了我如何尝试创建和更新成员变量并使用条件来查看两个变量是否为真,以便我可以调用我的下一个函数。

def __init__(self, parent=None):
    super(MorphingApp, self).__init__(parent)
    self.setupUi(self)

    self.startIm = None
    self.endIm = None

    self.initialState()


def initialState(self):

    self.btn_loadStart.clicked.connect(self.loadImageS)
    self.btn_loadEnd.clicked.connect(self.loadImageE)

    if(self.startIm is True and self.endIm is True):
        self.loadedState()


def initialState(self):
    self.startIm = True


def loadImageE(self):
    self.endIm = True

我的功能当然会做事,但我删除了不相关的部分。当我运行 GUI 时,我可以加载图像,但是在按下两个按钮后应该调用的函数没有被调用。我知道这一点是因为 GUI 的状态并没有像我想要的那样改变。

这是我第一次发布问题,所以请告诉我如何改进:)

【问题讨论】:

    标签: python user-interface pyqt qpushbutton


    【解决方案1】:

    使用简单的 True/False 标志来检查按钮是否至少被按下了一次。两个按钮都以设置为 False 的标志开始,因此我们可以在 init 方法中进行设置。

    然后将检查两个按钮是否都被按下的代码放置在连接到它们的函数中。最后,如果检查通过,只需调用相应的“final”函数。

    这是一个使用两个通用按钮的示例:

    def __init__(self, parent=None):
        super(MorphingApp, self).__init__(parent)
        self.btn_01_pressed = False
        self.btn_02_pressed = False
        self.set_buttons()
    
    def set_buttons(self):
        self.btn_01.clicked.connect(self.check01)
        self.btn_02.clicked.connect(self.check02)
    
    def check01(self):
        self.btn_01_pressed = True
        if self.btn_01_pressed is True and self.btn_02_pressed is True:
            self.call_final_function()
    
    def check02(self):
        self.btn_02_pressed = True
        if self.btn_01_pressed is True and self.btn_02_pressed is True:
            self.call_final_function()
    
    def call_final_function(self):
        # do something great here
    

    就像在您的帖子中一样,我省略了实际代码所需的一些部分(例如创建 QPushButton 小部件),但希望您能理解。

    【讨论】:

      【解决方案2】:
      def __init__(self, parent=None):
          super(MorphingApp, self).__init__(parent)
          self.setupUi(self)
      
          self.startIm = False
          self.endIm = False
      
          self.btn_loadStart.clicked.connect(self.loadImageS)
          self.btn_loadEnd.clicked.connect(self.loadImageE)
      
      
      def loadImageS(self):
          self.startIm = True
      
          if self.startIm and self.endIm:
              self.loadedState()
      
      
      def loadImageE(self):
          self.endIm = True
      
          if self.startIm and self.endIm:
             self.loadedState()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多