Здравствуйте, уважаемые знатоки.
Суть проблемы:
Есть некая база (MySQL). В одной из таблиц считаю количество автомашин на объекте и пытаюсь количество отобразить на форме (Tkinter) в Label.
По доброй (для всех новичков) традиции, интерпретатор ругается ошибками))).
Код тестовый, окно простейшее. Очень прошу помощи у сообщества. Заранее благодарю. Ниже код и выхлоп ошибки.
#!/usr/bin/python3
# -*- coding:utf-8 -*-
from tkinter import *
import mysql.connector
conn = mysql.connector.connect(host='localhost',
database='cars',
user='root',
password='axe',
buffered=True)
cursor = conn.cursor()
myquery = "SELECT count(*) FROM io_count"
cursor.execute(myquery)
cars_count = cursor.fetchone()
number_of_row = cars_count[0]
window = Tk()
window.title('Пример окна tkinter')
label = Label(window, number_of_row)
label.pack(padx=200, pady=50)
window.mainloop()
Ругань в консоли:
/usr/bin/python3.5 /home/axe/Python/Projects/tkinter/file1.py
Traceback (most recent call last):
File "/home/axe/Python/Projects/tkinter/file1.py", line 23, in <module>
label = Label(window, number_of_row)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2609, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2135, in __init__
BaseWidget._setup(self, master, cnf)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2115, in _setup
if 'name' in cnf:
TypeError: argument of type 'int' is not iterable
Update!!! Данная проблема решена!
Но появилась следующая по текущей теме.
В продолжение темы... Теперь пытаюсь вывести количество машин на форму в "стиле ООП". По-задумке после слов "Количество ТС на объекте: " должно отображаться собственно количество ТС на объекте. Появляется другая ругань:
# класс дочернего окна количества ТС на объекте
class countCars:
def __init__(self, master):
self.slave_count = Toplevel(master)
self.slave_count.title('Количество ТС на объекте')
self.slave_count.geometry('400x100+500+375')
self.btn_exit = Button(self.slave_count, text='Выход',
width=10, height=1, bd=2, command=self.exitCountCars)
self.lbl_count = Label(
self.slave_count, text='Количество ТС на объекте:' + str(self.number_of_row))
self.btn_exit.place(x=290, y=70)
self.btn_count.place(x=290, y=20)
self.lbl_count.place(x=10, y=20)
self.slave_count.grab_set()
self.slave_count.focus_set()
self.slave_count.wait_window()
self.slave_count.mainloop()
# функции дочернего окна количество ТС на объекте
def exitCountCars(self):
self.slave_count.destroy()
def count_cars(self):
conn = mysql.connector.connect(host='localhost',
database='cars',
user='root',
password='axe',
buffered=True)
self.cursor = conn.cursor()
myquery = "SELECT count(*) FROM io_count"
self.cursor.execute(myquery)
self.cars_count = self.cursor.fetchone()
self.number_of_row = self.cars_count[0]
self.cursor.close()
self.conn.commit()
self.conn.close()
Ругается:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__
return self.func(*args)
File "/home/axe/Python/Projects/tkinter/window1.py", line 59, in openCountCars
countCars(self.master)
File "/home/axe/Python/Projects/tkinter/window1.py", line 111, in __init__
self.slave_count, text='Количество ТС на объекте:' + str(self.number_of_row))
AttributeError: 'countCars' object has no attribute 'number_of_row'
Ещё один апдейт!
Всем спасибо! Проблема решена.
# класс дочернего окна количества ТС на объекте
class countCars:
def __init__(self, master):
self.slave_count = Toplevel(master)
self.slave_count.title('Количество ТС на объекте')
self.slave_count.geometry('400x100+500+375')
self.btn_exit = Button(self.slave_count, text='Выход',
width=10, height=1, bd=2, command=self.exitCountCars)
self.lbl_count = Label(
self.slave_count, text='Количество ТС на объекте: {0}'.format(str(self.count_cars())))
self.btn_exit.place(x=290, y=70)
#self.btn_count.place(x=290, y=20)
self.lbl_count.place(x=10, y=20)
self.slave_count.grab_set()
self.slave_count.focus_set()
self.slave_count.wait_window()
self.slave_count.mainloop()
# функции дочернего окна количество ТС на объекте
def exitCountCars(self):
self.slave_count.destroy()
def count_cars(self):
self.conn = mysql.connector.connect(host='localhost',
database='cars',
user='root',
password='axe',
buffered=True)
self.cursor = self.conn.cursor()
myquery = "SELECT count(*) FROM io_count"
self.cursor.execute(myquery)
self.cars_count = self.cursor.fetchone()
self.number_of_row = self.cars_count[0]
self.cursor.close()
self.conn.commit()
self.conn.close()
return self.number_of_row
Выкладываю рабочий (не факт что хороший) код. Может кому сгодится.