![](/img/trans.png)
[英]When I click QPushButton, I want to change QTextBrowser's text
[英]changing QPushButton text on click
我正在編寫一個簡單的 GUI 程序,需要我的按鈕在單擊時更改文本。 我像在示例中一樣對其進行了編碼,但它不起作用。
來自示例的代碼:
class MyWidget(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
"Hola Mundo", "Привет мир"]
self.button = QtWidgets.QPushButton("Click me!")
self.text = QtWidgets.QLabel("Hello World")
self.text.setAlignment(QtCore.Qt.AlignCenter)
self.layout = QtWidgets.QVBoxLayout()
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
self.setLayout(self.layout)
self.button.clicked.connect(self.magic)
def magic(self):
self.text.setText(random.choice(self.hello))
我的代碼:
class Form(QWidget):
def __init__(self):
super(Form, self).__init__()
# Font
r_one = QFont("RussoOne-Regular", 40, QFont.Bold)
# Buttons
self.pvz_p_score = QPushButton('0')
self.pvz_z_score = QPushButton('0')
self.pvt_p_score = QPushButton('0')
self.pvt_t_score = QPushButton('0')
self.pvp_p1_score = QPushButton('0')
self.pvp_p2_score = QPushButton('0')
buttons = [self.pvz_p_score,
self.pvz_z_score,
self.pvt_p_score,
self.pvt_t_score,
self.pvp_p1_score,
self.pvp_p2_score]
for b in buttons:
b.setStyleSheet('QPushButton {background-color: #8ffe09;\
color: black;\
border: none}')
b.setFlat(True)
b.setIconSize(QSize(100,100))
b.setFont(r_one)
b.setContextMenuPolicy(Qt.CustomContextMenu)
b.clicked.connect(self.left_click)
b.customContextMenuRequested.connect(self.right_click)
...
def left_click(self):
self.text.setText(int(self.text)+1)
def right_click(self):
if int(self.text) > 0: button.text.setText(int(self.text)-1)
但是,在我的例子中, self
對應於Form
,在示例中它鏈接到button
。 有任何想法嗎?
self.text
指的是 QLabel 小部件。 因此,它無法轉換為整數供您比較。text()
及其方法setText()
使用字符串,而不是整數。 要設置文本,您可以將數字轉換為字符串,或使用setNum()
,它接受整數和浮點值(但沒有num()
函數)。 def left_click(self):
self.text.setText(str(int(self.text.text()) + 1))
# alternatively:
# self.text.setNum(int(self.text.text()) + 1)
def right_click(self):
if int(self.text.text()) > 0:
button.text.setText(str(int(self.text.text()) - 1))
# alternatively:
# button.text.setNum(int(self.text.text()) - 1)
請注意,我假設文本存在並且可以轉換為整數。
好的,這個問題有點愚蠢,我搞砸了一些基本的 python 東西,但現在已經解決了。 希望它能幫助別人。
首先, self.text
不是類Form
的字段,因為沒有這樣的字段,如示例所示。 相反,對於我想做的事情,我需要以某種方式將按鈕對象傳遞給函數並像button.text()
和button.setText()
一樣訪問它。
由於我所有的按鈕都存儲在列表buttons
中,我可以通過它輕松地進行迭代,因此我決定創建 2 個返回函數的函數:
for b in buttons:
# I skipped style-related code
b.clicked.connect(self.get_left_click(b))
b.customContextMenuRequested.connect(self.get_right_click(b))
...
def get_left_click(self, button):
def left_click(self):
button.setText(str(int(button.text())+1))
return left_click
def get_right_click(self, button):
def right_click(self):
if int(button.text()) > 0: button.setText(str(int(button.text())-1))
return right_click
另外, QPushButton.setText()
不支持整數,所以我不得不用str(...)
PS 我希望有更好的解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.