簡體   English   中英

將全局變量傳遞給 PyQt5 中的函數

[英]Passing global variables to function in PyQt5

我正在創建應用程序,這需要從屏幕鍵盤輸入一些值。 我已經有帶有數字調用函數的按鈕,應該更新我想要使用的數字。 但每次按下按鈕時,都應填充不同的小數位。 所以我需要兩個全局變量:一個用於當前數字,另一個用於當前小數點位置。 但我不知道,這兩個變量的定義放在哪里,所以它們被認為是全局變量,可以在任何函數內部使用。 我的代碼如下所示:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QFileDialog, QMessageBox
from PyQt5.QtCore import QTimer
from mainwindow import Ui_MainWindow


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
   def __init__(self, *args, obj=None, **kwargs):
      super(MainWindow, self).__init__(*args, **kwargs)
      self.setupUi(self)
      self.kpadBtn0.clicked.connect(lambda:self.setValue(0))
      self.kpadBtn1.clicked.connect(lambda:self.setValue(1))
      self.kpadBtn2.clicked.connect(lambda:self.setValue(2))
      self.kpadBtn3.clicked.connect(lambda:self.setValue(3))
      self.kpadBtn4.clicked.connect(lambda:self.setValue(4))
      self.kpadBtn5.clicked.connect(lambda:self.setValue(5))
      self.kpadBtn6.clicked.connect(lambda:self.setValue(6))
      self.kpadBtn7.clicked.connect(lambda:self.setValue(7))
      self.kpadBtn8.clicked.connect(lambda:self.setValue(8))
      self.kpadBtn9.clicked.connect(lambda:self.setValue(9))

   disp_pos=1  #here it does not work
   val=0

   def setValue(self,num):
      val+=num*disp_pos   #it should be usable here
      disp_pos*=10
      self.newPosDisplay.setText(str(val))

app = QtWidgets.QApplication(sys.argv)

window = MainWindow()
window.show()
app.exec()

當我按下按鈕時,顯示以下錯誤:

NameError: name 'val' is not defined

使用全局變量作為最后的選擇,因為濫用它們會帶來問題,如為什么全局變量是邪惡的? . 在您的情況下, dispos_pos 和 val 是類的屬性就足夠了:

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, obj=None, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)

        self.disp_pos = 1 self.val = 0

        self.kpadBtn0.clicked.connect(lambda: self.setValue(0))
        self.kpadBtn1.clicked.connect(lambda: self.setValue(1))
        self.kpadBtn2.clicked.connect(lambda: self.setValue(2))
        self.kpadBtn3.clicked.connect(lambda: self.setValue(3))
        self.kpadBtn4.clicked.connect(lambda: self.setValue(4))
        self.kpadBtn5.clicked.connect(lambda: self.setValue(5))
        self.kpadBtn6.clicked.connect(lambda: self.setValue(6))
        self.kpadBtn7.clicked.connect(lambda: self.setValue(7))
        self.kpadBtn8.clicked.connect(lambda: self.setValue(8))
        self.kpadBtn9.clicked.connect(lambda: self.setValue(9))

    def setValue(self, num):
        self.val += num * self.disp_pos self.disp_pos *= 10 self.newPosDisplay.setText(str(self.val))

暫無
暫無

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

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