2017-10-09 101 views
0

我試圖顯示單擊按鈕時的一組操作以及單擊另一個按鈕時的其他一組選項。 下面是代碼:雖然小部件已更新,但未將Pyqt5更新的小部件添加到佈局

class Screen(QWidget): 
    def __init__(self): 
     super(Screen, self).__init__() 
     layout = QHBoxLayout(self) 
     self.all_running() 
     layout.addWidget(self.running_full_widget) 
     self.actions('1') 
     layout.addWidget(self.actions_full_widget) 
     self.setLayout(layout) 
     self.show() 
    def all_running(self): 
     self.running_full_widget = QWidget() 
     runnning_full_layout= QVBoxLayout() 
     button1 = QPushButton("btn1") 
     button2 = QPushButton("btn2") 
     button1.clicked.connect(lambda: self.actions('2')) 
     button2.clicked.connect(lambda: self.actions('3')) 
     runnning_full_layout.addWidget(button1) 
     runnning_full_layout.addWidget(button2) 
     self.running_full_widget.setLayout(runnning_full_layout) 
    def actions(self,value): 
     self.actions_full_widget= QWidget() 
     val = int(value) 
     print(val) 
     actions_layout = QVBoxLayout() 
     for i in range(val): 
      actions_item = QLabel(str(i)) 
      actions_layout.addWidget(actions_item) 
     self.actions_full_widget.setLayout(actions_layout) 

app = QApplication(sys.argv) 
Gui = Screen() 
sys.exit(app.exec_()) 

當按鈕被點擊,我可以看到的價值被更新,但它不是在主要佈局更新。 我該如何動態更新小部件? 如何在需要基於動態值添加小部件的情況下執行此操作。 我錯過了什麼信號和插槽? 如果我錯了,請糾正我。謝謝

回答

1

你的代碼幾乎在那裏。你看到的問題是小部件被添加,但從未刪除。下面的代碼可以簡化,但我試圖保持與您的密切關係,以便您可以更輕鬆地看到更改。

主要變化是現在有一個班級成員screen_layout和小部件從actions()裏面添加/刪除它。

import sys 
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QWidget, QPushButton, QLabel, QApplication 

class Screen(QWidget): 
    def __init__(self): 
     super(Screen, self).__init__() 
     layout = QHBoxLayout(self) 
     self.screen_layout = layout 
     self.all_running() 
     layout.addWidget(self.running_full_widget) 
     self.actions_full_widget = None 
     self.actions('1') 
     # layout.addWidget(self.actions_full_widget) 
     self.setLayout(layout) 
     self.show() 
    def all_running(self): 
     self.running_full_widget = QWidget() 
     runnning_full_layout= QVBoxLayout() 
     button1 = QPushButton("btn1") 
     button2 = QPushButton("btn2") 
     button1.clicked.connect(lambda: self.actions('2')) 
     button2.clicked.connect(lambda: self.actions('3')) 
     runnning_full_layout.addWidget(button1) 
     runnning_full_layout.addWidget(button2) 
     self.running_full_widget.setLayout(runnning_full_layout) 
    def actions(self,value): 
     # Remove any previously added widget 
     if self.actions_full_widget is not None: 
      self.screen_layout.removeWidget(self.actions_full_widget) 
      self.actions_full_widget.deleteLater() 
     self.actions_full_widget= QWidget() 
     val = int(value) 
     print(val) 
     actions_layout = QVBoxLayout() 
     for i in range(val): 
      actions_item = QLabel(str(i)) 
      actions_layout.addWidget(actions_item) 
     self.actions_full_widget.setLayout(actions_layout) 
     self.screen_layout.addWidget(self.actions_full_widget) 

app = QApplication(sys.argv) 
Gui = Screen() 
sys.exit(app.exec_()) 
+0

感謝您的回覆。是的,當我刪除以前的佈局時,它正在工作。 –

+0

我正在嘗試製作可點擊的動態小部件。一切正常,但問題在於所有動態小部件都指向最後一個小部件。我嘗試使用發件人和其他方法。我們如何解決這個問題?在Im下面發佈代碼的答案。 –

+0

你在問另一個關於一些不同代碼的問題。這應該是另一個帖子。這絕對不是最初發布的問題的「答案」。 –

相關問題