Как заставить sys.stdout печатать результаты в текстовое поле графического интерфейса пользователя tkinter - PullRequest
0 голосов
/ 18 апреля 2019

Я извлекаю все строки из базы данных MySQL и пытаюсь заставить их печатать в пределах textbox, а также использую sys.stdout в моем table_frame. Моя распечатка еще не отформатирована. Я пытаюсь сначала получить распечатку в textbox.

Я попытался выделить код, как говорит StackOverflow, но он не выделил текст в предварительном просмотре. Извините, если это сложнее читать. Возможно это исправит себя, когда это отправит.

Спасибо за любую помощь.

from tkinter import *
import tkinter.messagebox
import mysql.connector

#  ======================MySQL Connection================================================================

mydb = mysql.connector.connect(
    host = "localhost",
    user = "root",
    passwd = "<INSERT PASSWORD>",
    database = "testdb",
    )

# Create Cursor Instance
my_cursor = mydb.cursor()

table_frame = Frame(root, width=500, height=140, bg='yellow')
table_frame.pack(side=TOP)


textbox=Text(table_frame)
textbox.pack()
row = []

def inv_row_print():
    print("Item Code\tBrand\t\tUnits\t\tIn Stock\t\tUnit Cost")
    my_cursor.execute("SELECT * FROM trialprojectdb.inventory")
    all_rows = my_cursor.fetchall()

    for row in all_rows:
        result = print("{0}\t\t{1}\t\t{2}\t\t{3}\t\t{4}".format(row[0], row[1], row[2],
                 row[3], row[4]))
        textbox.insert(0, result)
sys.stdout.write = inv_row_print() 


btn2 = Button(btm_frame, text='Show Table', command = lambda : inv_row_print())
btn2.place(x=200,y=90)


root.mainloop()

Вот обратная связь, которую я получаю.

Item Code       Brand           Units           In Stock                Unit Cost
1               M&M Peanut              62              None            9.98
Traceback (most recent call last):
  File "Import_Test_Code2.py", line 124, in <module>
    sys.stdout.write = inv_row_print()
  File "Import_Test_Code2.py", line 123, in inv_row_print
    textbox.insert(0, result)
  File "C:\Users\darre\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 3269, in insert
    self.tk.call((self._w, 'insert', index, chars) + args)
_tkinter.TclError: wrong # args: should be ".!frame3.!text insert index chars ?tagList chars tagList ...?"

1 Ответ

1 голос
/ 18 апреля 2019

На случай, если у кого-то еще возникнет эта проблема, я опубликую решение, которое @furas помогло мне получить.

Оригинал

for row in all_rows:
        result = print("{0}\t\t{1}\t\t{2}\t\t{3}\t\t{4}".format(row[0], row[1], row[2],
                 row[3], row[4]))
        textbox.insert(0, result)

Новое - удалено print() с result, а в textbox.insert изменен индекс с 0 на 1.0.Также удалены sys.stdout.write = inv_row_print().

for row in all_rows:
        result = "{0}\t\t{1}\t\t{2}\t\t{3}\t\t{4}".format(row[0], row[1], row[2], 
                  row[3], row[4])
        textbox.insert(1.0, result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...