首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么gui窗口不弹出来?

为什么gui窗口不弹出来?
EN

Stack Overflow用户
提问于 2019-04-18 00:24:37
回答 1查看 0关注 0票数 0

这段代码应该可以工作但不是,程序会被执行,但GUI窗口不会出现。

我正在关注一个教程但我的GUI没有弹出它似乎另一个人正在使用python 3.7.2我正在使用pycharm,不确定这是否重要!这是代码的一部分。

代码语言:javascript
复制
from tkinter import ttk
from tkinter import *

import sqlite3

            class Product:
                # connection dir property
                db_name = 'database.db'

                def __init__(self, window):
                    # Initializations
                    self.wind = window
                    self.wind.title('Products Application')

                    # Creating a Frame Container
                    frame = LabelFrame(self.wind, text = 'Register new Product')
                    frame.grid(row = 0, column = 0, columnspan = 3, pady = 20)

                    # Name Input
                    Label(frame, text = 'Name: ').grid(row = 1, column = 0)
                    self.name = Entry(frame)
                    self.name.focus()
                    self.name.grid(row = 1, column = 1)

                    # Price Input
                    Label(frame, text = 'Price: ').grid(row = 2, column = 0)
                    self.price = Entry(frame)
                    self.price.grid(row = 2, column = 1)

                    # Button Add Product
                    ttk.Button(frame, text = 'Save Product').grid(row = 3, columnspan = 2, sticky = W + E)

                    # Output Messages
                    self.message = Label(text = '', fg = 'red')
                    self.message.grid(row = 3, column = 0, columnspan = 2, sticky = W + E)

                    # Table
                    self.tree = ttk.Treeview(height = 10, columns = 2)
                    self.tree.grid(row = 4, column = 0, columnspan = 2)
                    self.tree.heading('#0', text = 'Name', anchor = CENTER)
                    self.tree.heading('#1', text = 'Price', anchor = CENTER)

                    # Buttons
                    ttk.Button(text = 'DELETE', command = self.delete_product).grid(row = 5, column = 0, sticky = W + E)
                    ttk.Button(text = 'EDIT').grid(row = 5, column = 1, sticky = W + E)

                    # Filling the Rows
                    self.get_products()

这是我的其余代码,我称之为self.delete_product()和self.get_products()的函数。

代码语言:javascript
复制
# Function to Execute Database Querys
def run_query(self, query, parameters = ()):
    with sqlite3.connect(self.db_name) as conn:
        cursor = conn.cursor()
        result = cursor.execute(query, parameters)
        conn.commit()
    return result

# Get Products from Database
def get_products(self):
    # cleaning Table
    records = self.tree.get_children()
    for element in records:
        self.tree.delete(element)
    # getting data
    query = 'SELECT * FROM product ORDER BY name DESC'
    db_rows = self.run_query(query)
    # filling data
    for row in db_rows:
        self.tree.insert('', 0, text = row[1], values = row[2])

# User Input Validation
def validation(self):
    return len(self.name.get()) != 0 and len(self.price.get()) != 0

def add_product(self):
    if self.validation():
        query = 'INSERT INTO product VALUES(NULL, ?, ?)'
        parameters =  (self.name.get(), self.price.get())
        self.run_query(query, parameters)
        self.message['text'] = 'Product {} added Successfully'.format(self.name.get())
        self.name.delete(0, END)
        self.price.delete(0, END)
    else:
        self.message['text'] = 'Name and Price is Required'
    self.get_products()

def delete_product(self):
    self.message['text'] = ''
    try:
       self.tree.item(self.tree.selection())['text'][0]
    except IndexError as e:
        self.message['text'] = 'Please select a Record'
        return
    self.message['text'] = ''
    name = self.tree.item(self.tree.selection())['text']
    query = 'DELETE FROM product WHERE name = ?'
    self.run_query(query, (name, ))
    self.message['text'] = 'Record {} deleted Successfully'.format(name)
    self.get_products()

def edit_product(self):
    self.message['text'] = ''
    try:
        self.tree.item(self.tree.selection())['values'][0]
    except IndexError as e:
        self.message['text'] = 'Please, select Record'
        return
    name = self.tree.item(self.tree.selection())['text']
    old_price = self.tree.item(self.tree.selection())['values'][0]
    self.edit_wind = Toplevel()
    self.edit_wind.title = 'Edit Product'
    # Old Name
    Label(self.edit_wind, text = 'Old Name:').grid(row = 0, column = 1)
    Entry(self.edit_wind, textvariable = StringVar(self.edit_wind, value = name), state = 'readonly').grid(row = 0, column = 2)
    # New Name
    Label(self.edit_wind, text = 'New Price:').grid(row = 1, column = 1)
    new_name = Entry(self.edit_wind)
    new_name.grid(row = 1, column = 2)

    # Old Price
    Label(self.edit_wind, text = 'Old Price:').grid(row = 2, column = 1)
    Entry(self.edit_wind, textvariable = StringVar(self.edit_wind, value = old_price), state = 'readonly').grid(row = 2, column = 2)
    # New Price
    Label(self.edit_wind, text = 'New Name:').grid(row = 3, column = 1)
    new_price= Entry(self.edit_wind)
    new_price.grid(row = 3, column = 2)

    Button(self.edit_wind, text = 'Update', command = lambda: self.edit_records(new_name.get(), name, new_price.get(), old_price)).grid(row = 4, column = 2, sticky = W)
    self.edit_wind.mainloop()

def edit_records(self, new_name, name, new_price, old_price):
    query = 'UPDATE product SET name = ?, price = ? WHERE name = ? AND price = ?'
    parameters = (new_name, new_price,name, old_price)
    self.run_query(query, parameters)
    self.edit_wind.destroy()
    self.message['text'] = 'Record {} updated successfylly'.format(name)
    self.get_products()


if __name__ == '__main__':
 window = Tk()
 application = Product(window)
 window.mainloop()
EN

回答 1

Stack Overflow用户

发布于 2019-04-18 09:40:19

你的缩进是关闭的,这对我来说是个错误。假设这只是从格式化到帖子,我修复它但仍然有错误AttributeError: 'Product' object has no attribute 'delete_product'。在注释掉调用函数的底部的行之后self.delete_product()self.get_products()因为没有为它们定义的函数来引用它,所以它为我运行并创建一个GUI。代码:

代码语言:javascript
复制
import sqlite3

class Product:
    # connection dir property
    db_name = 'database.db'

    def __init__(self, window):
        # Initializations
        self.wind = window
        self.wind.title('Products Application')

        # Creating a Frame Container
        frame = LabelFrame(self.wind, text = 'Register new Product')
        frame.grid(row = 0, column = 0, columnspan = 3, pady = 20)

        # Name Input
        Label(frame, text = 'Name: ').grid(row = 1, column = 0)
        self.name = Entry(frame)
        self.name.focus()
        self.name.grid(row = 1, column = 1)

        # Price Input
        Label(frame, text = 'Price: ').grid(row = 2, column = 0)
        self.price = Entry(frame)
        self.price.grid(row = 2, column = 1)

        # Button Add Product
        ttk.Button(frame, text = 'Save Product').grid(row = 3, columnspan = 2, sticky = W + E)

        # Output Messages
        self.message = Label(text = '', fg = 'red')
        self.message.grid(row = 3, column = 0, columnspan = 2, sticky = W + E)

        # Table
        self.tree = ttk.Treeview(height = 10, columns = 2)
        self.tree.grid(row = 4, column = 0, columnspan = 2)
        self.tree.heading('#0', text = 'Name', anchor = CENTER)
        self.tree.heading('#1', text = 'Price', anchor = CENTER)

        # Buttons
        # ttk.Button(text = 'DELETE', command = self.delete_product).grid(row = 5, column = 0, sticky = W + E)
        ttk.Button(text = 'EDIT').grid(row = 5, column = 1, sticky = W + E)

        # Filling the Rows
        # self.get_products()

if __name__ == '__main__':
 window = Tk()
 application = Product(window)
 window.mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档