久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

  1. <tfoot id='vo05g'></tfoot>

      <legend id='vo05g'><style id='vo05g'><dir id='vo05g'><q id='vo05g'></q></dir></style></legend>

    1. <small id='vo05g'></small><noframes id='vo05g'>

      <i id='vo05g'><tr id='vo05g'><dt id='vo05g'><q id='vo05g'><span id='vo05g'><b id='vo05g'><form id='vo05g'><ins id='vo05g'></ins><ul id='vo05g'></ul><sub id='vo05g'></sub></form><legend id='vo05g'></legend><bdo id='vo05g'><pre id='vo05g'><center id='vo05g'></center></pre></bdo></b><th id='vo05g'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='vo05g'><tfoot id='vo05g'></tfoot><dl id='vo05g'><fieldset id='vo05g'></fieldset></dl></div>

        <bdo id='vo05g'></bdo><ul id='vo05g'></ul>
    2. 從 Singleton 接收 pyqtSignal

      Receiving pyqtSignal from Singleton(從 Singleton 接收 pyqtSignal)
    3. <small id='XUFWT'></small><noframes id='XUFWT'>

          <legend id='XUFWT'><style id='XUFWT'><dir id='XUFWT'><q id='XUFWT'></q></dir></style></legend>

              <tbody id='XUFWT'></tbody>

          • <tfoot id='XUFWT'></tfoot>
            <i id='XUFWT'><tr id='XUFWT'><dt id='XUFWT'><q id='XUFWT'><span id='XUFWT'><b id='XUFWT'><form id='XUFWT'><ins id='XUFWT'></ins><ul id='XUFWT'></ul><sub id='XUFWT'></sub></form><legend id='XUFWT'></legend><bdo id='XUFWT'><pre id='XUFWT'><center id='XUFWT'></center></pre></bdo></b><th id='XUFWT'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='XUFWT'><tfoot id='XUFWT'></tfoot><dl id='XUFWT'><fieldset id='XUFWT'></fieldset></dl></div>
              <bdo id='XUFWT'></bdo><ul id='XUFWT'></ul>
                本文介紹了從 Singleton 接收 pyqtSignal的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                python中有單例類:

                There's singleton class in python:

                from PyQt5.QtCore import QObject, pyqtSignal
                import logging
                
                class Singleton(QObject):
                    _instance = None
                    def __new__(cls, *args, **kwargs):
                        if not isinstance(cls._instance, cls):
                            cls._instance = QObject.__new__(cls, *args, **kwargs)
                        return cls._instance
                
                
                class DataStatus(Singleton, QObject):
                    '''
                    '''
                    dataChanged = pyqtSignal(str)
                    __val = 'init'
                
                    def __init__(self):
                        super().__init__()
                
                    def setVal(self, val):
                        self.dataChanged.emit('emit: ' + val)
                        logging.debug('emit: ' + val)
                        self.__val = val
                
                    def getVal(self):
                        return self.__val
                

                我們的想法是讓整個程序都可以訪問一個單一的數據存儲.每次調用 set Method 時,都應該發出一個信號,告訴所有實例數據從某個地方發生了更改,應該重新讀取.

                The idea is to have one single data store accessible from allover the program. Every time a set Method is called, a signal should be emitted telling all instances that from somewhere the data was changed and should be re-read.

                很酷的計劃,但是如果你看一下測試代碼

                Cool plan, but if you look at the test code

                def test(self):     
                    self.ds1 = DataStatus()
                    self.ds1.dataChanged.connect(self.windowaction)
                    print(self.ds1)
                    print(self.ds1.getVal())
                
                    self.ds1.setVal('ds1.first')
                
                    self.ds2 = DataStatus()
                    #self.ds2.dataChanged.connect(self.windowaction)
                    print(self.ds2)
                    print(self.ds2.getVal())
                
                    self.ds2.setVal('ds2.second')
                
                    print(self.ds1.getVal())
                
                def windowaction(self, q):
                    print(q)
                

                而且控制臺輸出很奇怪(至少對我來說):

                And the console output it get's strange (at least for me):

                <DataStatus.DataStatus.DataStatus object at 0x03207580>
                init
                emit: ds1.first
                <DataStatus.DataStatus.DataStatus object at 0x03207580>
                ds1.first
                ds2.second
                

                兩個實例確實有相同的地址,很酷的單身人士可以完成它的工作.到 ds1 如果已連接dataChange"信號,如果從 ds1 更新數據,該信號將正常工作.但是如果我用 ds2.set 更改數據,ds1 沒有收到信號......

                Both instances do have the same address, cool the singleton does it's job. To ds1 if've connected the "dataChange" signal which works properly if from ds1 data is updated. BUT no signal is received by ds1 if I change the data with ds2.set......

                有人對這里發生的事情有解釋嗎?數據在實例之間正確共享,但不是信號:-/

                Does anybody have an explanation about what happens here. Data is shared properly across the instances, but not the signals:-/

                推薦答案

                雖然您的 Singleton 類遵守始終返回相同的對象,但這并不意味著它已正確實現,在您的情況下,在 new 中創建了新對象但是您返回創建的第一個對象(滿足您顯然想要的)但信號dataChanged"屬于新對象而不是導致問題的第一個對象.這種情況下的解決方案是使用元類,因為這個庫指出:

                Although your Singleton class complies that the same object is always returned but that does not imply that it is correctly implemented, in your case in new the new object is created but you return the first object created (fulfilling what you apparently want) but the signal "dataChanged "belongs to the new object and not to the first object causing the problem. The solution in this case is to use metaclasses as this library points out:

                class Singleton(type(QObject), type):
                    def __init__(cls, name, bases, dict):
                        super().__init__(name, bases, dict)
                        cls._instance = None
                
                    def __call__(cls, *args, **kwargs):
                        if cls._instance is None:
                            cls._instance = super().__call__(*args, **kwargs)
                        return cls._instance
                
                
                class DataStatus(QObject, metaclass=Singleton):
                    dataChanged = pyqtSignal(str)
                    __val = "init"
                
                    def __init__(self):
                        super().__init__()
                
                    def setVal(self, val):
                        self.dataChanged.emit("emit: " + val)
                        logging.debug("emit: " + val)
                        self.__val = val
                
                    def getVal(self):
                        return self.__val
                

                這篇關于從 Singleton 接收 pyqtSignal的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                相關文檔推薦

                How to bind a function to an Action from Qt menubar?(如何將函數綁定到 Qt 菜單欄中的操作?)
                PyQt progress jumps to 100% after it starts(PyQt 啟動后進度躍升至 100%)
                How to set yaxis tick label in a fixed position so that when i scroll left or right the yaxis tick label should be visible?(如何將 yaxis 刻度標簽設置在固定位置,以便當我向左或向右滾動時,yaxis 刻度標簽應該可見
                `QImage` constructor has unknown keyword `data`(`QImage` 構造函數有未知關鍵字 `data`)
                Change x-axis ticks to custom strings(將 x 軸刻度更改為自定義字符串)
                How to show progress bar while saving file to excel in python?(如何在python中將文件保存為excel時顯示進度條?)
                  <bdo id='XUYbp'></bdo><ul id='XUYbp'></ul>
                • <i id='XUYbp'><tr id='XUYbp'><dt id='XUYbp'><q id='XUYbp'><span id='XUYbp'><b id='XUYbp'><form id='XUYbp'><ins id='XUYbp'></ins><ul id='XUYbp'></ul><sub id='XUYbp'></sub></form><legend id='XUYbp'></legend><bdo id='XUYbp'><pre id='XUYbp'><center id='XUYbp'></center></pre></bdo></b><th id='XUYbp'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='XUYbp'><tfoot id='XUYbp'></tfoot><dl id='XUYbp'><fieldset id='XUYbp'></fieldset></dl></div>
                  • <tfoot id='XUYbp'></tfoot>

                      <tbody id='XUYbp'></tbody>

                        <legend id='XUYbp'><style id='XUYbp'><dir id='XUYbp'><q id='XUYbp'></q></dir></style></legend>

                          <small id='XUYbp'></small><noframes id='XUYbp'>

                          主站蜘蛛池模板: 亚欧洲精品在线视频免费观看 | 国产高清一区二区三区 | 成人国产精品久久 | 欧美一区二区视频 | a毛片视频网站 | 午夜爽爽男女免费观看hd | 欧美激情视频网站 | 日日夜夜av | 中文字幕精品一区二区三区在线 | 婷婷久久五月 | 精品九九九 | 在线日韩| 欧美一区在线视频 | 国产成人综合一区二区三区 | 成人妇女免费播放久久久 | 国产激情91久久精品导航 | 天天色综| 国产精品乱码一区二区三区 | 福利一区二区在线 | 欧美色综合一区二区三区 | www.青娱乐| 国产精品揄拍一区二区 | 一区二区视频在线 | 天天色天天色 | 国产精品a免费一区久久电影 | 日本粉嫩一区二区三区视频 | 欧美日韩亚 | 日韩在线资源 | 欧美成人精品一区二区男人看 | 久草免费在线视频 | 国产东北一级毛片 | 日本 欧美 三级 高清 视频 | 亚洲热在线视频 | 亚av在线 | 国产99精品| 欧美日韩国产一区二区 | 日韩精品一区二区三区中文在线 | 国产精品黄视频 | 国产精品久久久久一区二区三区 | 欧美日韩一区二区在线 | 久久精品aaa |