Advertisement
Guest User

Untitled

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