Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.08 KB | None | 0 0
  1. from kivy.app import App
  2. from kivy.lang import Builder
  3. from kivy.properties import ObjectProperty, StringProperty
  4. from kivy.uix.boxlayout import BoxLayout
  5. from kivy.uix.image import Image
  6. from kivymd.dialog import MDDialog
  7. from kivymd.theming import ThemeManager
  8. from kivymd.navigationdrawer import NavigationLayout
  9. from kivymd.list import OneLineAvatarListItem, ILeftBody
  10. from kivymd.toast import toast
  11. from kivymd.dialog import MDDialog
  12. from kivy.uix.popup import Popup
  13. from threading import Thread
  14.  
  15. import socket
  16.  
  17.  
  18. sock = socket.socket()
  19. sock.connect(('127.0.0.1', 6718))
  20. sock.sendall(b"add_contact hello llo")
  21.  
  22. sock = socket.socket()
  23. sock.connect(('127.0.0.1', 6718))
  24.  
  25. sock.sendall(b'new llo')
  26.  
  27.  
  28. class MyLayout(BoxLayout):
  29.     scr_mngr = ObjectProperty(None)
  30.  
  31.     def check_data_login(self):
  32.         username = self.scr_mngr.screen1.username.text
  33.         password = self.scr_mngr.screen1.password.text
  34.  
  35.         print(username)
  36.         print(password)
  37.         if username == "KivyMD" and password == "kivy":
  38.             self.ids["wrongpass"].text = ""
  39.             self.change_screen("screen2")
  40.         else:
  41.             self.ids["wrongpass"].text = "Wrong username or password, please try again"
  42.  
  43.     def change_screen(self, screen, *args):
  44.         self.scr_mngr.transition.direction = 'left'
  45.         self.scr_mngr.current = screen
  46.  
  47.     def back_to_chat(self):
  48.         self.scr_mngr.transition.direction = 'right'
  49.         self.scr_mngr.current = 'screen2'
  50.  
  51.  
  52. class nav_layout(NavigationLayout):
  53.     def print_text(self):
  54.         print('hello')
  55.  
  56.     def check_data_login(self):
  57.         username = self.ids.screen1.username.text
  58.         password = self.ids.screen1.password.text
  59.  
  60.         print(username)
  61.         print(password)
  62.         if username == "KivyMD" and password == "kivy":
  63.             self.change_screen("screen2")
  64.             self.ids.wrongpass.text = ""
  65.         else:
  66.             self.ids.wrongpass.text = \
  67.                 "Wrong username or password, please try again"
  68.  
  69.     def change_screen(self, screen, *args):
  70.         self.ids.scr_mngr.transition.direction = 'left'
  71.         self.ids.scr_mngr.current = screen
  72.  
  73.     def back_to_chat(self):
  74.         self.ids.scr_mngr.transition.direction = 'right'
  75.         self.ids.scr_mngr.current = 'screen2'
  76.  
  77.     def logout(self):
  78.         # logout function, returns to screen 1
  79.         self.ids.scr_mngr.current = 'screen1'
  80.  
  81. class UploadPopup(Popup):
  82.     def load(self, path, selection):
  83.         print(path, selection)
  84.  
  85.  
  86. KV = """
  87. #:import Toolbar kivymd.toolbar.Toolbar
  88. #:import MDNavigationDrawer kivymd.navigationdrawer.MDNavigationDrawer
  89. #:import NavigationLayout kivymd.navigationdrawer.NavigationLayout
  90. #:import NavigationDrawerDivider kivymd.navigationdrawer.NavigationDrawerDivider
  91. #:import NavigationDrawerToolbar kivymd.navigationdrawer.NavigationDrawerToolbar
  92. #:import MDTextField kivymd.textfields.MDTextField
  93. #:import MDSeparator kivymd.card.MDSeparator
  94. #:import MDThemePicker kivymd.theme_picker.MDThemePicker
  95. #:import CardTransition kivy.uix.screenmanager.CardTransition
  96. #:import Factory kivy.factory.Factory
  97.  
  98.  
  99. <MDCustomIconItem>:
  100.    text: root.text
  101.  
  102.    AvatarSampleWidget:
  103.        source: root.icon
  104.  
  105. <UploadPopup>:
  106.    id: popup
  107.    title: "Upload"
  108.    BoxLayout:
  109.        FileChooserIconView:
  110.            id: FileChoose
  111.            pos_hint_x: 0.5
  112.            pos_hint_y: 0.5
  113.            on_selection: root.load(FileChoose.path, FileChoose.selection)
  114.        MDRaisedButton:
  115.            text: "Upload"
  116.            text_color: (0,0,0,1)
  117.            on_release: root.load(FileChoose.path, FileChoose.selection)
  118.            on_release: popup.dismiss()
  119.  
  120.        MDRaisedButton:
  121.            text: "Close"
  122.            text_color: (0,0,0,1)
  123.            on_release: popup.dismiss()
  124.  
  125.  
  126. nav_layout:
  127.    id: nav_layout
  128.    MDNavigationDrawer:
  129.        id: nav_drawer
  130.        drawer_logo: 'logo.png'
  131.        NavigationDrawerToolbar:
  132.            title: 'hello'
  133.        NavigationDrawerIconButton:
  134.            icon: 'settings'
  135.            text: 'Account Settings'
  136.            on_release: root.change_screen('screen3')
  137.        NavigationDrawerIconButton:
  138.            icon: 'face'
  139.            text: 'Friends'
  140.            on_release: root.print_text()
  141.        NavigationDrawerIconButton:
  142.            icon: 'logout'
  143.            text: 'Logout'
  144.            on_release: root.logout()
  145.        NavigationDrawerDivider:
  146.            height: dp(1)
  147.    MyLayout:
  148.        scr_mngr: scr_mngr
  149.        orientation: 'vertical'
  150.  
  151.  
  152.        ScreenManager:
  153.  
  154.            transition: CardTransition()
  155.            id: scr_mngr
  156.            screen1: screen1
  157.  
  158.            Screen:
  159.                id: screen1
  160.                name: 'screen1'
  161.                username: username
  162.                password: password
  163.  
  164.                BoxLayout:
  165.                    size_hint: None, None
  166.                    size: dp(520), dp(340)
  167.                    pos_hint: {'center_x': 0.5, 'center_y': 0.5}
  168.  
  169.                    BoxLayout:
  170.                        orientation:'vertical'
  171.                        padding: dp(20)
  172.                        spacing:20
  173.  
  174.                        MDLabel:
  175.                            text: 'Chat App'
  176.                            theme_text_color: 'Secondary'
  177.                            font_style:"Title"
  178.                            size_hint_y: None
  179.                            height: dp(36)
  180.  
  181.                        MDSeparator:
  182.                            height: dp(1)
  183.  
  184.                        MDTextField:
  185.                            id: username
  186.                            hint_text: "Username "
  187.                            size_hint_y: 0.9
  188.                            helper_text_mode: "on_focus"
  189.  
  190.                        MDTextField:
  191.                            id: password
  192.                            hint_text: "Password "
  193.                            helper_text_mode: "on_focus"
  194.                            size_hint_y: 0.9
  195.                            password: True
  196.  
  197.                        MDFlatButton:
  198.                            text: "Login"
  199.                            pos_hint: {'center_x': 0.5}
  200.                            on_release: root.check_data_login()
  201.  
  202.                        MDLabel:
  203.                            id: wrongpass
  204.                            color: 1,0,1,1
  205.                            text: ""
  206.  
  207.  
  208.  
  209.            Screen:
  210.                name: 'screen2'
  211.                id: screen2
  212.  
  213.                Toolbar:
  214.                    id: toolbar
  215.                    title: "Welcome ! "
  216.                    pos_hint: {'center_x': 0.5, 'center_y': 0.96}
  217.                    md_bg_color: app.theme_cls.primary_color
  218.                    background_palette: 'DeepPurple'
  219.                    background_hue: 'A400'
  220.                    left_action_items: [['menu', lambda x: app.root.toggle_nav_drawer() ]]
  221.                    right_action_items: [['animation', lambda x: MDThemePicker().open()], ['camera', lambda x: print('hello')]]
  222.  
  223.                MDLabel:
  224.                    font_style: 'Title'
  225.                    theme_text_color: 'Primary'
  226.                    text: "Data :"
  227.                    height: self.texture_size[1] + dp(3)
  228.                    halign: 'center'
  229.                    pos_hint: {'center_x': 0.5, 'center_y': 0.5}
  230.  
  231.  
  232.  
  233.            Screen:
  234.                name: 'screen3'
  235.                id: 'screen3'
  236.  
  237.                Toolbar:
  238.                    id: tools
  239.                    title: "Your Profile"
  240.                    pos_hint: {'center_x': 0.5, 'center_y': 0.96}
  241.                    md_bg_color: app.theme_cls.primary_color
  242.                    background_palette: 'DeepPurple'
  243.                    background_hue: 'A400'
  244.                    left_action_items: [['arrow-left', lambda x: root.back_to_chat()]]
  245.                MDLabel:
  246.                    id: 'Profile_String'
  247.                    font_size: 90
  248.                    text: "XXX"
  249.                    halign: 'center'
  250.                    pos_hint: {'center_x': 0.5, 'center_y': 0.85}
  251.  
  252.            Screen:
  253.                name: 'screen4'
  254.                id: 'screen4'
  255.                
  256.                Toolbar:
  257.                    id: tools
  258.                    title: "XXX"
  259.                    pos_hint: {'center_x': 0.5, 'center_y': 0.96}
  260.                    md_bg_color: app.theme_cls.primary_color
  261.                    background_palette: 'DeepPurple'
  262.                    background_hue: 'A400'
  263.                    left_action_items: [['menu', lambda x: app.root.toggle_nav_drawer() ]]
  264.                    right_action_items: [['animation', lambda x: MDThemePicker().open()], ['camera', lambda x: print('hello')]]
  265.                ScrollView:
  266.                    pos_hint: {'center_x': .55, 'y': .35}
  267.                    MDLabel:
  268.                        id: 'Chat_String'
  269.                        font_size: 40
  270.                        text: "XXX"
  271.                        
  272.  
  273.                MDTextField:
  274.                    id: 'Input_String'
  275.                    hint_text: 'Enter Your Message...'
  276.                    helper_text_mode: 'on_focus'
  277.                    pos_hint: {'center_x': 0.35, 'center_y': 0.2}
  278.                    size_hint_x: 0.6
  279.                    multiline: True
  280.  
  281.  
  282.                MDRaisedButton:
  283.                    id: 'Send_Button'
  284.                    text: 'Send'
  285.                    pos_hint: {'center_x': 0.75, 'center_y': 0.2}
  286.  
  287.                MDRaisedButton:
  288.                    id: 'Choose_Image'
  289.                    text: 'Attach File'
  290.                    pos_hint: {'center_x': 0.9, 'center_y': 0.2}
  291.                    on_release: Factory.UploadPopup().open()
  292. """
  293.  
  294.  
  295. class MDCustomIconItem(OneLineAvatarListItem):
  296.     icon = StringProperty('')
  297.     text = StringProperty()
  298.  
  299.     def _set_active(self, active, list):
  300.         pass
  301.  
  302.  
  303. class AvatarSampleWidget(ILeftBody, Image):
  304.     pass
  305.  
  306.  
  307. class MyApp(App):
  308.     theme_cls = ThemeManager()
  309.     theme_cls.primary_palette = 'Blue'
  310.     title = "Navigation Drawer"
  311.     main_widget = None
  312.  
  313.     def build(self):
  314.         self.main_widget = Builder.load_string(KV)
  315.         return self.main_widget
  316.  
  317.     def callback(self, instance, value):
  318.         self.main_widget.ids.scr_mngr.current = 'screen4'
  319.  
  320.     def recover_data(self):
  321.         print('started')
  322.         while True:
  323.             data = sock.recv(1024)
  324.             data = data.decode()
  325.             if data:
  326.                 print(data)
  327.                 data = data.split()
  328.                 data = data[-1] + ": " + ' '.join(data[:-1])
  329.                 r = data + '\n'
  330.                 open('chat1.txt', 'a+').write(r)
  331.                 e = open('chat1.txt', 'r').readlines()
  332.                 self.main_widget.ids.Chat_String.text = '\n\r'.join(e)
  333.                 print(data)
  334.  
  335.     def on_start(self):
  336.         Thread(target=self.recover_data).start()
  337.         for i in range(15):
  338.             self.main_widget.ids.nav_drawer.add_widget(
  339.                 MDCustomIconItem(
  340.                     text="Item menu %d" % i,
  341.                     icon='logo.png',
  342.                     on_release=lambda x, y=i: self.callback(x, y)))
  343.  
  344.  
  345. MyApp().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement