Kivy: рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб, рдХрд┐рд╡реА рдФрд░ рдкрд╛рдЗрдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдмрдврд╝рд╛рдПрдВред рд░рд┐рдПрдХреНрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рддреНрд░реБрдЯрд┐ ("рд░рд┐рдПрдХреНрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ")

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: kivy/kivy

рдХрд▓реНрдкрдирд╛_рдлрд╝рд╛рдЗрд▓

c:\Users\sony\Dropbox\notepad_app\2_Paint\build_windows>cat noteapp.spec
# -*- mode: python -*-

block_cipher = None


a = Analysis(['..\\__main__.py'],
             pathex=['c:\\Users\\sony\\Dropbox\\notepad_app\\2_Paint\\build_windows'],
             binaries=None,
             datas=None,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='noteapp',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='noteapp')

рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЕрдм рддрдХ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреА рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рд░рд┐рдПрдХреНрдЯрд░ from kivy.support import install_twisted_reactor рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ

c:\Users\sony\Dropbox\notepad_app\2_Paint\build_windows\dist\noteapp>cmd /K noteapp.exe
[<module 'pyimod03_importers' from 'c:\python27\lib\site-packages\PyInstaller-3.2.dev0+g2f86ac6-py2.7.egg\PyInstaller\loader\pyimod03_importers.py'>, <module 'tempfile' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\tempfile.pyc'>, <module 'sys' (built-in)>, <module 'atexit' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\atexit.pyc'>, <module 'ctypes' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\ctypes\__init__.pyc'>, <module 'encodings' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\encodings\__init__.pyc'>, <module 'win32com' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\win32com\__init__.pyc'>, <module 'shutil' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\shutil.pyc'>, <module 'os' from 'c:\Users\sony\Dropbox\NOTEPA~1\2_Paint\BUILD_~1\dist\noteapp\os.pyc'>]
[INFO              ] [Logger      ] Record log in c:/Users/sony\.kivy\logs\kivy_16-04-17_2.txt
[INFO              ] [Kivy        ] v1.9.2-dev0
[INFO              ] [Python      ] v2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
 Traceback (most recent call last):
   File "c:\Users\sony\Dropbox\notepad_app\2_Paint\__main__.py", line 7, in <module>
     install_twisted_reactor() # twisted eventloop with kivy on the same reactor
   File "c:\python27\lib\site-packages\kivy\support.py", line 176, in install_twisted_reactor
     _threadedselect.install()
   File "c:\Python27\lib\site-packages\twisted\internet\_threadedselect.py", line 354, in install
     installReactor(reactor)
   File "c:\Python27\lib\site-packages\twisted\internet\main.py", line 32, in installReactor
     raise error.ReactorAlreadyInstalledError("reactor already installed")
 twisted.internet.error.ReactorAlreadyInstalledError: reactor already installed
Failed to execute script __main__

рдореБрдЦреНрдп .py

#Written according to https://kivy.org/docs/guide/other-frameworks.html
#works fine when using python __main__.py
import sys
modulenames = set(sys.modules)&set(globals())
allmodules = [sys.modules[name] for name in modulenames]
print allmodules
#reactor import (compulsory first import)
from kivy.support import install_twisted_reactor
install_twisted_reactor() # twisted eventloop with kivy on the same reactor
#kivy import
from kivy.app import App
from kivy.config import Config
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.lang import Builder
#twisted and other-control imports
from twisted.internet import reactor
#screens and widgets imports
from screens.login_screen import LoginScreen
from canvas.canvas_widget import CanvasWidget,RadioButton
from screens.approve_clients import ApproveClients
#server and behaviour configuration file import
from config import config
try:
    import _cffi_backend
except:
    print "Please install PyInstaller for building. Not necessary for running."
#adding twisted imports
from twisted.internet.defer import DeferredQueue
from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import NetstringReceiver
from twisted.internet import defer
from twisted.protocols.basic import NetstringReceiver
from twisted.internet.defer import inlineCallbacks
from twisted.internet.threads import deferToThread
from twisted.internet.protocol import ClientFactory
import os
###############################################
#Screen specified below have majority behaviour specified in .kv
#Other screens are sin ./screens
class ActivitySelectScreen(Screen):
    '''allows user to choose whether to 
            1. create server 
            2. connect to a pre-existing one '''
    def __init__(self,**kwargs):
        super(ActivitySelectScreen, self).__init__(**kwargs)


class PaintApp(Screen):
    '''Screen class of the canvas widget'''
    def __init__(self,**kwargs):
        super(PaintApp, self).__init__(**kwargs)

class AppScreenManager(ScreenManager):
    '''ScreenManager class'''

class notepad_app_v0(App):
    '''Base application class'''
    def build(self):
        self.reactor=reactor
        self.config_obj=config(allow_all=False,debug=False,activate_audio=True)
        return Builder.load_file('.'+os.sep+'kivy'+os.sep+'paint.kv')

if __name__ == '__main__':
    #setting resolution
    Config.set('graphics', 'width', '960')
    Config.set('graphics', 'height', '540')  # 16:9
    #disabling multi-touch and resizing the app
    Config.set('graphics', 'resizable', '0')
    Config.set('input', 'mouse', 'mouse,disable_multitouch')
    notepad_app_v0().run()

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

pyinstaller рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ twisted.internet.reactor рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд┐рд╡реА рдХреЛрдб рд░рди (рдЬреЛ рднреА рд╣реЛ) рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import kivy
kivy.require('1.9.1')

# fix for pyinstaller packages app to avoid ReactorAlreadyInstalledError
import sys
if 'twisted.internet.reactor' in sys.modules:
    del sys.modules['twisted.internet.reactor']

# install twisted reactor
from kivy.support import install_twisted_reactor
install_twisted_reactor()

рд╕рднреА 7 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдпрд╛ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди?

pyinstaller рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдВ twisted.internet.reactor рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд┐рд╡реА рдХреЛрдб рд░рди (рдЬреЛ рднреА рд╣реЛ) рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import kivy
kivy.require('1.9.1')

# fix for pyinstaller packages app to avoid ReactorAlreadyInstalledError
import sys
if 'twisted.internet.reactor' in sys.modules:
    del sys.modules['twisted.internet.reactor']

# install twisted reactor
from kivy.support import install_twisted_reactor
install_twisted_reactor()

рд╢рд╛рдпрдж рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб kivy.support.install_twisted_reactor рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╣рдореЗрдВ рд░рд┐рдПрдХреНрдЯрд░ рдЪрдпрди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдореБрдбрд╝ рд╣реБрдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдХрд╕реНрдЯрдо qt5reactor рдХреЗ рд╕рд╛рде PyInstaller qt5 рдФрд░ рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИред
rnixx' рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╢реБрдХреНрд░рд┐рдпрд╛

# fix for pyinstaller packages app to avoid ReactorAlreadyInstalledError
import sys
if 'twisted.internet.reactor' in sys.modules:
    del sys.modules['twisted.internet.reactor']

from PySide2.QtWidgets import QApplication
app = QApplication(sys.argv) 
import qt5reactor
qt5reactor.install()

рдкреАрдПрд╕: рдПрдХ рдХрд┐рд╡реА рд╕рдВрдмрдВрдзрд┐рдд рдзрд╛рдЧреЗ рдореЗрдВ рдПрдХ рдХреНрдпреВрдЯреА рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдлрд┐рд░ рднреА рдпрд╣ рд░рд┐рдПрдХреНрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рддреНрд░реБрдЯрд┐ рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдПрдХреНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдбрд╝-рд╣реБрдХ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ

рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╡реА рдХреА рдЧрд▓рддреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИред https://github.com/pyinstaller/pyinstaller/issues/3390 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдВрдЪреЗрдВ - рдпрд╣ рдЙрдирдХреЗ рд░рди-рдЯрд╛рдЗрдо рд╣реБрдХ рдХреЗ рд╕рд╛рде pyinstaller рдкрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЪреБрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдбрд╝ рд░рд┐рдПрдХреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

frankgould picture frankgould  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hansent picture hansent  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

phelantomas picture phelantomas  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fishfin05 picture fishfin05  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

asmith26 picture asmith26  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ