久久久久久久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'>

                          主站蜘蛛池模板: 欧美一级二级在线观看 | 日韩伦理一区二区 | 亚洲女人天堂成人av在线 | 羞羞网站在线观看 | 99精品欧美一区二区三区综合在线 | 精品国产99| 91高清在线 | 日韩久久久久久 | 国产精品毛片 | 日韩免费高清视频 | 国产精品高潮呻吟久久 | 久久成人精品视频 | 中文字幕日韩欧美 | 男女视频91 | 亚洲综合色视频在线观看 | 午夜影晥 | 国产中文字幕在线 | 天天射美女 | 成人av免费在线观看 | 久久最新网址 | 无码日韩精品一区二区免费 | 国产精品欧美一区二区三区不卡 | 色吊丝2288sds中文字幕 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 久久人人网 | 国产不卡一区在线观看 | 亚洲免费在线观看视频 | 国产精品久久久久久久久免费软件 | 懂色av色香蕉一区二区蜜桃 | 色av一区 | 亚洲视频1区 | 日韩精品a在线观看图片 | 毛片大全 | 国产激情在线播放 | 女人牲交视频一级毛片 | 99久久婷婷国产综合精品电影 | 亚洲精品久久久一区二区三区 | 久久久久久国产精品免费免费男同 | 91久久国产综合久久 | 日韩一级黄色片 | 精品在线播放 |