简体   繁体   English

如何刷新/重新初始化 QStackedWidget 中的小部件

[英]How Refresh/Re-initialize Widgets in QStackedWidget

I'm trying to create a script that makes API calls to a website to get info (via the requests module).我正在尝试创建一个脚本,使 API 调用网站以获取信息(通过请求模块)。 The user can then manipulate the website using my script/gui.然后用户可以使用我的脚本/gui 操作网站。

My app's main window will have several buttons at the bottom which acts like tabs to switch between windows(let's say for argument's sake 2 buttons to switch between two windows).我的应用程序的主要 window 将在底部有几个按钮,它们像选项卡一样在窗口之间切换(为了争论起见,我们说 2 个按钮在两个窗口之间切换)。

When certain changes are made, I need the QStackedWidget to refresh all the widgets/labels in certain windows that are not currently being displayed.当进行某些更改时,我需要 QStackedWidget 刷新某些 windows 中当前未显示的所有小部件/标签。

Summary of my code:我的代码摘要:

# Global Variables
app = QApplication(sys.argv)
win = QtWidgets.QStackedWidget()
response = {} # global dict to store API response from website


class UiWindowOne(QMainWindow):
    # This window mostly shows information that I get from the website.
    def __init__(self):
        super(UiWindowOne, self).__init__()
        self.setup_ui(self)
        self.retranslate_ui(self)
        # Then I map buttons to methods
    
    def setup_ui(self, WindowOne):
        # This was generated by QT Designer and places widgets
    
    def retranslate_ui(self, WindowOne):
        # This was generated by QT Designer and places widgets
        
        
    def refresh(self):
        '''
        This function refreshes the current window. Basically, I put everything in the __init__ function in here (except "super(UiWindowOne, self).__init__()".
        :return: None
        '''
        self.setup_ui(self)
        self.retranslate_ui(self)
        # Also map buttons to methods

    


class UiWindowTwo(QMainWindow):
    def __init__(self):
        super(UiWindowTwo, self).__init__()
        self.setup_ui(self)
        self.retranslate_ui(self)
        # Then I map buttons to methods
    
    def setup_ui(self, WindowTwo):
        # This was generated by QT Designer
    
    def retranslate_ui(self, WindowTwo):
        # This was generated by QT Designer
        
        
    def refresh(self):
        '''
        This function refreshes the current window. Basically, I put everything in the __init__ function in here (except "super(UiWindowTwo, self).__init__()".
        :return: None
        '''
        self.setup_ui(self)
        self.retranslate_ui(self)
        # Also map buttons to methods

    def update_website(self):
        # Make changes to website
        # After changes were made, I want to get modified info from the website and re-initialize/refresh both windows to reflect the changes made.
        # I can easily call self.refresh() to refresh WindowTwo. But I cannot refresh WindowOne from here.
        

def main():
    # Here I make API calls to the Website to get info/images
    

    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap(".\\imgs/static/A.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
    win.setWindowIcon(icon)
    win.setWindowTitle("NAME")
    
    
    first_window = UiWindowOne()
    second_window = UiWindowTwo()
    

    win.addWidget(first_window)
    win.addWidget(second_window)
    

    win.setGeometry(250, 250, 820, 854)
    win.setFixedWidth(820)
    win.setFixedHeight(854)
    win.show()


    sys.exit(app.exec())


if __name__ == '__main__':
    main()      

I have tried doing a "first_window.refresh()" under the update_website() function in UiWindowTwo, but then python tells me that first_window is not defined.我曾尝试在 UiWindowTwo 的 update_website() function 下执行“first_window.refresh()”,但随后 python 告诉我未定义 first_window。

I then tried making first_window and second_window global variables, but then I ended up reordering my whole script and couldn't get it to run.然后我尝试制作 first_window 和 second_window 全局变量,但最终我重新排序了我的整个脚本并且无法运行它。

@musicamante, thank you for the info. @musicamante,谢谢你提供的信息。 Looks like my whole approach to PyQT is wrong.看起来我对 PyQT 的整个方法都是错误的。 I removed the main function for now and everything works.我暂时删除了主要的 function,一切正常。 I will finish my current script as is and then try to do as you suggest by not editing pyuic files.我将按原样完成我当前的脚本,然后尝试通过不编辑 pyuic 文件来按照您的建议进行操作。 I'll also look at not using QMainWindow in StckedWidget.我还将研究在 StckedWidget 中不使用 QMainWindow。 Thank you!谢谢你!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM