2017-05-22 126 views
-1

我正在测试Qlabel的更新。我基本上以随机顺序显示问题,但标签的旧文本仍显示并与新文本结合。我不确定如何在'确定'点击之间清除它。QLabel在PyQt中的刷新对话框

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
import sys 
import random 

class GameDialog(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 

     layout = QGridLayout() 

     lblWBS = QLabel("lblWBS") 
     lblDialog = QLabel("lblDialog") 
     btnOK = QPushButton("OK") 
     layout.addWidget(btnOK, 5, 1) 

     def randomOptions(): 
      rdmOpt = [2,3,4] 
      random.shuffle(rdmOpt) 

      optGreen = QRadioButton() 
      optYellow = QRadioButton() 
      optRed = QRadioButton() 
      lblGreen = QLabel("Green") 
      lblYellow = QLabel("Yellow") 
      lblRed = QLabel("Red") 

      layout.addWidget(lblWBS, 0, 1) 
      layout.addWidget(lblDialog, 1, 1) 
      layout.addWidget(optGreen, rdmOpt[0], 0) 
      layout.addWidget(lblGreen, rdmOpt[0], 1) 
      layout.addWidget(optYellow, rdmOpt[1], 0) 
      layout.addWidget(lblYellow, rdmOpt[1], 1) 
      layout.addWidget(optRed, rdmOpt[2], 0) 
      layout.addWidget(lblRed, rdmOpt[2], 1) 


      self.setLayout(layout) 
     randomOptions() 
     btnOK.clicked.connect(randomOptions) 

     self.setWindowTitle("PALCDMS") 


app = QApplication(sys.argv) 
dialog = GameDialog() 
dialog.show() 
app.exec_() 
+2

这比你想象的要糟糕。您不是追加文本,而是实际上创建了一大堆新对象,并在您每次点击时将它们添加到您的布局中。 –

回答

0

由于您正在创建新对象,实现您的想法的方式有错误。

您应该保存一个将更改位置的小部件列表,并在执行更改之前使用removeWidget()将其删除,然后将其放回到布局中。

class GameDialog(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 
     layout = QGridLayout(self) 

     lblWBS = QLabel("lblWBS") 
     lblDialog = QLabel("lblDialog") 
     btnOK = QPushButton("OK") 
     layout.addWidget(btnOK, 5, 1) 

     optGreen = QRadioButton() 
     optYellow = QRadioButton() 
     optRed = QRadioButton() 
     lblGreen = QLabel("Green") 
     lblYellow = QLabel("Yellow") 
     lblRed = QLabel("Red") 

     layout.addWidget(lblWBS, 0, 1) 
     layout.addWidget(lblDialog, 1, 1) 

     l = [optGreen, lblGreen, optYellow, lblYellow, optRed, lblRed] 

     def randomOptions(): 

      for w in l: 
       layout.removeWidget(w) 

      rdmOpt = [2,3,4] 
      random.shuffle(rdmOpt) 

      for i in range(len(l)): 
       layout.addWidget(l[i], rdmOpt[i//2], i % 2) 

     randomOptions() 
     btnOK.clicked.connect(randomOptions) 
     self.setWindowTitle("PALCDMS") 
+0

非常感谢你,我在尝试removeWidget之前,我想我只是在工作场所。 – cybermohr

+0

如果我的答案可以帮助您正确标记它,请。 – eyllanesc