Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.11 KB | None | 0 0
  1. from tkinter import *
  2. import psycopg2 # импорт библиотек
  3.  
  4. conn = psycopg2.connect(dbname = "bu_base", user = "postgres", password = "1", host = "localhost", port = '5432') # подключение к базе данных в PostgreSQL
  5.  
  6. cursor = conn.cursor()
  7. cursor.execute("SELECT kontakti.id_klienta FROM bu_base.public.kontakti") # выбор всех строчек из поля "id_klienta"
  8. id_klienta = cursor.fetchall()
  9. cursor.execute("SELECT kontakti.nazvanie FROM bu_base.public.kontakti")# выбор всех строчек из поля "nazvanie"
  10. nazvanie = cursor.fetchall()
  11. cursor.execute("SELECT kontakti.kontaktnoe_litso FROM bu_base.public.kontakti")# выбор всех строчек из поля "kontaktnoe_litso"
  12. kontaktnoe_litso = cursor.fetchall()
  13. cursor.execute("SELECT kontakti.telefon FROM bu_base.public.kontakti")# выбор всех строчек из поля "telefon"
  14. telefon = cursor.fetchall()
  15. cursor.execute("SELECT kontakti.adres FROM bu_base.public.kontakti")# выбор всех строчек из поля "adres"
  16. adres = cursor.fetchall()
  17.  
  18. root = Tk()
  19.  
  20.  
  21. # Cоздание функции, которая будет рисовать внешний интерфейс для работы с конкретной таблицей.
  22. def Formi():
  23. text_from_entry_0 = entry_0.get()
  24. number_of_string=int(text_from_entry_0) # Считывание информации из поля и преобразование в целочисленный тип.
  25. entry_1 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  26. label_1 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'id_klienta', font = 'Candara 14', fg = 'black')
  27. entry_1.insert(END, id_klienta[number_of_string])
  28.  
  29. entry_2 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  30. label_2 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Nazvanie', font = 'Candara 14', fg = 'black')
  31. entry_2.insert(END, nazvanie[number_of_string])
  32.  
  33. entry_3 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  34. label_3 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Kontaktnoe_litso', font = 'Candara 14', fg = 'black')
  35. entry_3.insert(END, kontaktnoe_litso[number_of_string])
  36.  
  37. entry_4 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  38. label_4 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Telefon', ont = 'Candara 14', fg = 'black')
  39. entry_4.insert(END, telefon[number_of_string])
  40.  
  41. entry_5 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  42. label_5 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Adres', font = 'Candara 14', fg = 'black')
  43. entry_5.insert(END, adres[number_of_string])
  44.  
  45. # ^ Создание текста и полей для ввода со внесёнными значениями из базы данных.
  46.  
  47. but_1 = Button(frame_1, bg = 'white', fg = 'black')
  48. but_1["text"] = "Следующая запись"
  49. but_2 = Button(frame_1, bg = 'white', fg = 'black')
  50. but_2["text"] = "Отмена"
  51. but_3 = Button(frame_1, bg = 'white', fg = 'black')
  52. but_3["text"] = "Сохранить"
  53.  
  54. # Кнопки "Следующая запись", "Отмена" и "Сохранить" соответственно.
  55.  
  56. label_1.pack()
  57. entry_1.pack()
  58. label_2.pack()
  59. entry_2.pack()
  60. label_3.pack()
  61. entry_3.pack()
  62. label_4.pack()
  63. entry_4.pack()
  64. label_5.pack()
  65. entry_5.pack()
  66.  
  67. # Упаковка всех виджетов, кроме кнопок.
  68.  
  69.  
  70. but_1.place(x = 50, y = 370)
  71. but_2.place(x = 200, y = 370)
  72. but_3.place(x = 280, y = 370)
  73.  
  74. # Упаковка кнопок с выбранными координатами.
  75.  
  76. frame_1 = Frame(root, bg = 'white', bd = 150) # Создание фрейма.
  77.  
  78. entry_0 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  79. label_0 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Введите номер записи: ', font = 'Candara 14', fg = 'black')
  80.  
  81. # Текст и поле для ввода номера записи.
  82.  
  83.  
  84. but_0 = Button(frame_1, bg = 'white', fg = 'black')
  85. but_0["text"] = "Продолжить" # Создание кнопки "Продолжить".
  86. but_0.bind('<Button-1>', Formi) # Вызов функции "Formi".
  87.  
  88.  
  89.  
  90. frame_1.pack()
  91. label_0.pack()
  92. entry_0.pack()
  93. but_0.pack()
  94. # Упаковка всех виджетов.
  95.  
  96. root.mainloop()
  97.  
  98. def Schitivanie():
  99. text_from_entry_0 = entry_0.get()
  100. number_of_string=int(text_from_entry_0)
  101. return number_of_string
  102.  
  103. def Next():
  104. number_of_string += 1
  105. return number_of_string
  106.  
  107. but_0.bind('<Button-1>', Schitivanie)
  108. but_0.bind('<Button-1>', Formi)
  109. but_1.bind('<Button-1>', Next)
  110. bur_1.bind('<Button-1>', Formi)
  111.  
  112. Exception in Tkinter callback
  113. Traceback (most recent call last):
  114. File "C:UsersritadAppDataLocalProgramsPythonPython35-32libtkinter__init__.py", line 1550, in __call__
  115. return self.func(*args)
  116. TypeError: Formi() missing 1 required positional argument: 'number_of_string'
  117.  
  118. from tkinter import *
  119. import psycopg2
  120.  
  121.  
  122. def Schitivanie(entry_0):
  123. text_from_entry_0 = entry_0.get()
  124. numb_of_string=int(text_from_entry_0)
  125. return numb_of_string
  126.  
  127. number_of_string = Schitivanie()
  128.  
  129. def Formi(number_of_string):
  130.  
  131. entry_1 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  132. label_1 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'id_klienta', font = 'Candara 14', fg = 'black', )
  133. entry_1.insert(END, id_klienta[number_of_string])
  134.  
  135. entry_2 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  136. label_2 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Nazvanie', font = 'Candara 14', fg = 'black')
  137. entry_2.insert(END, nazvanie[number_of_string])
  138.  
  139. entry_3 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  140. label_3 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Kontaktnoe_litso', font = 'Candara 14', fg = 'black')
  141. entry_3.insert(END, kontaktnoe_litso[number_of_string])
  142.  
  143. entry_4 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  144. label_4 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Telefon', font = 'Candara 14', fg = 'black')
  145. entry_4.insert(END, telefon[number_of_string])
  146.  
  147. entry_5 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  148. label_5 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Adres', font = 'Candara 14', fg = 'black')
  149. entry_5.insert(END, adres[number_of_string])
  150.  
  151.  
  152. but_1 = Button(frame_1, bg = 'white', fg = 'black')
  153. but_1["text"] = "Следующая запись"
  154. but_2 = Button(frame_1, bg = 'white', fg = 'black')
  155. but_2["text"] = "Отмена"
  156. but_3 = Button(frame_1, bg = 'white', fg = 'black')
  157. but_3["text"] = "Сохранить"
  158.  
  159.  
  160. label_1.pack()
  161. entry_1.pack()
  162. label_2.pack()
  163. entry_2.pack()
  164. label_3.pack()
  165. entry_3.pack()
  166. label_4.pack()
  167. entry_4.pack()
  168. label_5.pack()
  169. entry_5.pack()
  170.  
  171.  
  172. but_1.place(x = 50, y = 390)
  173. but_2.place(x = 200, y = 390)
  174. but_3.place(x = 280, y = 390)
  175. but_1.bind('<Button-1>', Next)
  176. but_1.bind('<Button-1>', Formi)
  177. but_2.bind('<Button-1>', Cancel)
  178. but_3.bind('<Button-1>', Save)
  179.  
  180.  
  181.  
  182. def Next(number_of_string):
  183. number_of_string += 1
  184. return number_of_string
  185.  
  186. number_of_string = Next()
  187.  
  188. conn = psycopg2.connect(dbname = "bu_base", user = "postgres", password = "1", host = "localhost", port = '5432')
  189. cursor = conn.cursor()
  190.  
  191.  
  192. cursor.execute("SELECT kontakti.id_klienta FROM bu_base.public.kontakti")
  193. id_klienta = cursor.fetchall()
  194.  
  195. cursor.execute("SELECT kontakti.nazvanie FROM bu_base.public.kontakti")
  196. nazvanie = cursor.fetchall()
  197.  
  198. cursor.execute("SELECT kontakti.kontaktnoe_litso FROM bu_base.public.kontakti")
  199. kontaktnoe_litso = cursor.fetchall()
  200.  
  201. cursor.execute("SELECT kontakti.telefon FROM bu_base.public.kontakti")
  202. telefon = cursor.fetchall()
  203.  
  204. cursor.execute("SELECT kontakti.adres FROM bu_base.public.kontakti")
  205. adres = cursor.fetchall()
  206.  
  207.  
  208. root = Tk()
  209.  
  210.  
  211. frame_1 = Frame(root, bg = 'white', bd = 150)
  212.  
  213. entry_0 = Entry(frame_1, width = 40, bd = 4, bg = 'white')
  214. label_0 = Label(frame_1, width = 40, bd = 4, bg = 'white', text = 'Введите номер записи: ', font = 'Candara 14', fg = 'black', )
  215.  
  216.  
  217.  
  218. but_0 = Button(frame_1, bg = 'white', fg = 'black')
  219. but_0["text"] = "Продолжить"
  220. but_0.bind('<Button-1>', Schitivanie)
  221. but_0.bind('<Button-1>', Formi)
  222.  
  223. frame_1.pack()
  224. label_0.pack()
  225. entry_0.pack()
  226. but_0.pack()
  227. root.mainloop()
  228.  
  229. Traceback (most recent call last):
  230. File "C:UsersritadDownloadsГрафический интерфейс к контактам(2).py", line 10, in <module>
  231. number_of_string = Schitivanie()
  232. TypeError: Schitivanie() missing 1 required positional argument: 'entry_0'
  233.  
  234. # Сначала идут функции. Т.к. это функции-обработчики, то они должны принимать event
  235. def Schitivanie(event):
  236. # глобальные переменные, которые функция меняет, должны быть объявлены как глобальные,
  237. # иначе функция просто создаст локальную переменную с тем же именем
  238. # и ее значение останется внутри функции
  239. global number_of_string
  240. text_from_entry_0 = entry_0.get()
  241. number_of_string = int(text_from_entry_0)
  242.  
  243.  
  244. def Formi(event):
  245. # насколько я вижу, тут ничего не нужно объявлять, как глобальные переменные
  246. ...
  247.  
  248.  
  249. def Next(event):
  250. global number_of_string
  251. number_of_string += 1
  252. # По идее эта функция также должна менять текст в поле entry_0, но могу ошибаться
  253.  
  254. # Дальше идет большой блок обращения к базе данных, вообще лучше его вынести в отдельную функцию
  255. ...
  256.  
  257. root = Tk()
  258.  
  259.  
  260. frame_1 = Frame(root, bg = 'white', bd = 150)
  261.  
  262. number_of_string = 0 # Просто обнуляем значение (или присваиваем какое-то начальное значение)
  263. # Изменение текста в entry делается через создание отдельной переменной Tkinter
  264. entry_0_text = StringVar()
  265. entry_0 = Entry(frame_1, width = 40, bd = 4, bg = 'white', textvariable=entry_0_text)
  266. entry_0_text.set(str(number_of_string))
  267.  
  268. # Остальной код
  269. ...
  270.  
  271. import tkinter as tk
  272.  
  273. # Тут идут функции и классы, не относящиеся к интерфейсу
  274.  
  275. # Главный класс приложения
  276. class App(tk.Tk):
  277. def __init__(self, parent):
  278. # Нужно запустить функцию инициализации родительского класса
  279. super().__init__()
  280.  
  281. # Тут идет создание и размещение всех элементов управления
  282. frame = tk.Frame(parent)
  283. frame.pack()
  284.  
  285. self.entry_0 = tk.Entry(frame)
  286. self.entry_0.pack()
  287. self.number_of_string = 0
  288.  
  289. bt1 = tk.Button(frame, text='Click me')
  290. bt1.pack()
  291. bt1.bind('<1>', self.bt1_click)
  292.  
  293. def bt1_click(self, event):
  294. self.number_of_string = int(self.entry_0.get())
  295.  
  296. app = App()
  297. app.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement