簡體   English   中英

如何在 GUI 中只運行一次函數

[英]How to run a function only once in GUI

我想在我的程序中只運行一次removeHi(self)函數,如何做到這一點。 請給我提意見。 我的整個代碼如下:

import sys
from PyQt5.QtWidgets import *
from functools import wraps

class TestWidget(QWidget):
gee = ''
def __init__(self):
    global gee
    gee = 'Hi'
    QWidget.__init__(self, windowTitle="A Simple Example for PyQt.")
    self.outputArea=QTextBrowser(self)
    self.outputArea.append(gee)
    self.helloButton=QPushButton("reply", self)
    self.setLayout(QVBoxLayout())
    self.layout().addWidget(self.outputArea)
    self.layout().addWidget(self.helloButton)
    self.helloButton.clicked.connect(self.removeHi)
    self.helloButton.clicked.connect(self.sayHello)

def removeHi(self):
    self.outputArea.clear()


def sayHello(self):
    yourName, okay=QInputDialog.getText(self, "whats your name?", "name")
    if not okay or yourName=="":
        self.outputArea.append("hi stranger!")
    else:
        self.outputArea.append(f"hi,{yourName}")

app=QApplication(sys.argv)
testWidget=TestWidget()
testWidget.show()
sys.exit(app.exec_())

程序運行時,GUI 將顯示“Hi”。 我希望在按下按鈕reply后刪除QTextBrowser中的“Hi”,但只要我單擊按鈕,程序就會清除文本瀏覽器中的所有內容。

我的目標是:只刪除第一個Hi ,只要我按下reply按鈕,函數sayHello(self)的名稱就會保留。

問題在於程序的邏輯:您應該檢查是否必須清除文本,使用默認值,只要對話框更改輸出就會更改:

class TestWidget(QWidget):
    clearHi = True
    def __init__(self):
        QWidget.__init__(self, windowTitle="A Simple Example for PyQt.")
        self.outputArea = QTextBrowser()
        self.outputArea.append('Hi')
        self.helloButton = QPushButton("reply")
        layout = QVBoxLayout(self)
        layout.addWidget(self.outputArea)
        layout.addWidget(self.helloButton)
        self.helloButton.clicked.connect(self.removeHi)
        self.helloButton.clicked.connect(self.sayHello)

    def removeHi(self):
        if self.clearHi:
            self.outputArea.clear()

    def sayHello(self):
        yourName, okay = QInputDialog.getText(
            self, "whats your name?", "name")
        if not okay:
            return
        self.clearHi = False
        if not yourName:
            self.outputArea.append("hi stranger!")
        else:
            self.outputArea.append(f"hi, {yourName}")

注意:不要使用全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM