问题写入文件

时间:2018-05-25 12:59:34

标签: python html python-3.x tkinter

我在写入HTML文件时遇到问题。

我希望能够将我的代码放在我用HTML编写的代码中,但是我的代码只会在此定义中没有任何While / If语句时执行。如果我确实有Whiles / Ifs,我的HTML文件就会变成空白。我不知道为什么会这样,我似乎无法找到解决方法。

有没有办法使用Whiles / Ifs而不使我的代码删除我文件中的所有内容,而是让它写出我想要的内容?

def invoice_creator_window():
    global total_cost, total_cost_list, list_of_items, invoice_created

    invoice_created = Toplevel()
    invoice_created.focus_set()
    invoice_created.resizable(width = True, height = False)
    invoice_created.title("Invoice Created")
    invoice_created.geometry("300x300")
    invoice_created.geometry("+400+400")
    invoice_created.configure(bg = "limegreen")
    currentDisplay = 10

    print(total_cost, total_cost_list, list_of_items)

    done = Label(invoice_created, text = "Items have been purchased. Invoice has been created. Please check this program's file location.")
    invoice_created = Button(invoice_created, text = "Done", bg = "white", command = close_window)

    # 
    done.grid(row = 1, column = 1, padx = 7.5, pady = space_between)
    invoice_created.grid(row = 2, column = 1, padx = 7.5, pady = space_between)

    # This section is for the invoice creation with HTML.        
    html_formatting_start = """<!DOCTYPE html>
    <html>
    <head>
    <title>Games R Us - Invoice</title>
    </head>
    <body>


    <style>
    body {background-color: #F7D358;}
    h1   {color: #775A03;}
    p    {color: ; border: 1px solid #775A03; padding: 15px; width: 650px}
    </style>

    <center>
    <h1>Games R Us - Invoice Document</h1>    
    """
    counter = 0
    while len(list_of_items) > 0:
        global html_formatting_mid
        print(counter)
        html_formatting_mid = ("""
        <h3>
        <p>
        <img src="https://steamcdn-a.akamaihd.net/steam/apps/211420/header.jpg?t=1483694369"</img>
        <br>""" + str(list_of_items[counter]) + """<br>
        <i>$""" + str(total_cost_list[counter]) + """ AUD</i>   

        </p>
        </h3>
        """)

        if counter >= len(list_of_items) - 1:
            return
        else:
            counter += 1
    html_formatting_end = """
    <h2>In Total: $""" + str(total_cost) +""" AUD</h2>
    <br>

    <b>Information Grabbed from These Links: </b>
    <a href="https://store.steampowered.com/explore/new/">Steam's New Releases</a> [LIVE] - 
    <a href="https://store.steampowered.com/search/?filter=topsellers">Steam's Top Sellers</a> [LIVE] - 
    <a href="https://www.umart.com.au/Headphones_147C.html">Umart's Headphones</a> [PRE-DOWNLOADED] - 
    <a href="https://www.umart.com.au/Microphones_496C.html">Umart's Microphones</a> [PRE-DOWNLOADED]

    </center>
    </body>
    </html>"""

    invoice_creation = open(invoice_file, "w")

    invoice_creation.write(html_formatting_start)
    invoice_creation.write(html_formatting_mid)
    invoice_creation.write(html_formatting_end)

    invoice_creation.close()

#############################################################################

button_buy = Button(welcome_window, text = "Buy", fg = "white", bg = "goldenrod", font = gui_font_10,
                    command = invoice_creator_window)

注意:“total_cost_list”和“list_of_items”都是列表。 “total_cost”是一个值。不要过分担心这些问题的背景,但我想澄清它们可能会影响任何事情。

3 个答案:

答案 0 :(得分:0)

以下是代码的固定版本,尽可能简单。

from tkinter import *
import webbrowser
root = Tk ()

space_between, invoice_file = 5, "Invoice.html"
total_cost, total_cost_list, list_of_items = 10, [1, 9], ["Something", "Something 2"]

def close_window (): root.destroy ()

def invoice_creator_window():
    global total_cost, total_cost_list, list_of_items, invoice_created

    invoice_created = Toplevel()
    invoice_created.focus_set()
    invoice_created.resizable(width = True, height = False)
    invoice_created.title("Invoice Created")
    invoice_created.geometry("300x300")
    invoice_created.geometry("+400+400")
    invoice_created.configure(bg = "limegreen")
    currentDisplay = 10

    print(total_cost, total_cost_list, list_of_items)

    done = Label(invoice_created, text = "Items have been purchased. Invoice has been created.")
    invoice_created = Button(invoice_created, text = "Done", bg = "white", command = close_window)

    # 
    done.grid(row = 1, column = 1, padx = 7.5, pady = space_between)
    invoice_created.grid(row = 2, column = 1, padx = 7.5, pady = space_between)

    # This section is for the invoice creation with HTML.        
    html_formatting_start = """<!DOCTYPE html>
    <html>
    <head>
    <title>Games R Us - Invoice</title>
    </head>
    <body>


    <style>
    body {background-color: #F7D358;}
    h1   {color: #775A03;}
    p    {color: ; border: 1px solid #775A03; padding: 15px; width: 650px}
    </style>

    <center>
    <h1>Games R Us - Invoice Document</h1>    
    """
    counter = 0
    html_formatting_mid = ""
    while len(list_of_items) > 0:
        print(counter)
        html_formatting_mid += """
        <h3>
        <p>
        <img src="https://steamcdn-a.akamaihd.net/steam/apps/211420/header.jpg?t=1483694369"</img>
        <br>""" + str(list_of_items[counter]) + """<br>
        <i>$""" + str(total_cost_list[counter]) + """ AUD</i>   

        </p>
        </h3>
        """

        if counter >= len(list_of_items) - 1:
            break
        else:
            counter += 1
    html_formatting_end = """
    <h2>In Total: $""" + str(total_cost) +""" AUD</h2>
    <br>

    <b>Information Grabbed from These Links: </b>
    <a href="https://store.steampowered.com/explore/new/">Steam's New Releases</a> [LIVE] - 
    <a href="https://store.steampowered.com/search/?filter=topsellers">Steam's Top Sellers</a> [LIVE] - 
    <a href="https://www.umart.com.au/Headphones_147C.html">Umart's Headphones</a> [PRE-DOWNLOADED] - 
    <a href="https://www.umart.com.au/Microphones_496C.html">Umart's Microphones</a> [PRE-DOWNLOADED]

    </center>
    </body>
    </html>"""

    invoice_creation = open(invoice_file, "w")

    invoice_creation.write (html_formatting_start + html_formatting_mid + html_formatting_end)

    invoice_creation.close ()

    webbrowser.open (invoice_file)

#############################################################################

button_buy = Button(root, text = "Buy", fg = "white", bg = "goldenrod",
                    command = invoice_creator_window).pack ()
root.mainloop ()

答案 1 :(得分:0)

我找到了解决方案。

def invoice_creator_window():
    global total_cost, total_cost_list, list_of_items, invoice_created

    invoice_created = Toplevel()
    invoice_created.focus_set()
    invoice_created.resizable(width = True, height = False)
    invoice_created.title("Invoice Created")
    invoice_created.geometry("300x300")
    invoice_created.geometry("+400+400")
    invoice_created.configure(bg = "limegreen")
    currentDisplay = 10

    print(total_cost, total_cost_list, list_of_items)

    done = Label(invoice_created, text = "Items have been purchased. Invoice has been created. Please check this program's file location.")
    invoice_created = Button(invoice_created, text = "Done", bg = "white", command = close_window)

    # 
    done.grid(row = 1, column = 1, padx = 7.5, pady = space_between)
    invoice_created.grid(row = 2, column = 1, padx = 7.5, pady = space_between)

    # This section is for the invoice creation with HTML.        
    html_formatting_start = """<!DOCTYPE html>
    <html>
    <head>
    <title>Games R Us - Invoice</title>
    </head>
    <body>


    <style>
    body {background-color: #F7D358;}
    h1   {color: #775A03;}
    p    {color: ; border: 1px solid #775A03; padding: 15px; width: 650px}
    </style>

    <center>
    <h1>Games R Us - Invoice Document</h1>    
    """
    counter = 0
    html_formatting_mid = ""
    for items in list_of_items:
        print(counter)
        html_formatting_mid += ("""
        <h3>
        <p>
        <img src="https://steamcdn-a.akamaihd.net/steam/apps/211420/header.jpg?t=1483694369"</img>
        <br>""" + str(list_of_items[counter]) + """<br>
        <i>$""" + str(total_cost_list[counter]) + """ AUD</i>   

        </p>
        </h3>
        """)
        counter += 1
    html_formatting_end = """
    <h2>In Total: $""" + str(total_cost) +""" AUD</h2>
    <br>

    <b>Information Grabbed from These Links: </b>
    <a href="https://store.steampowered.com/explore/new/">Steam's New Releases</a> [LIVE] - 
    <a href="https://store.steampowered.com/search/?filter=topsellers">Steam's Top Sellers</a> [LIVE] - 
    <a href="https://www.umart.com.au/Headphones_147C.html">Umart's Headphones</a> [PRE-DOWNLOADED] - 
    <a href="https://www.umart.com.au/Microphones_496C.html">Umart's Microphones</a> [PRE-DOWNLOADED]

    </center>
    </body>
    </html>"""

    invoice_creation = open(invoice_file, "w")

    invoice_creation.write(html_formatting_start)
    invoice_creation.write(html_formatting_mid)
    invoice_creation.write(html_formatting_end)

    invoice_creation.close()

#############################################################################

button_buy = Button(welcome_window, text = "Buy", fg = "white", bg = "goldenrod", font = gui_font_10,
                    command = invoice_creator_window)

我回到了旧的for循环使用并尝试使用它。除了这个时候,我添加了html_formatting_mid + =(“”“到它,然后在for循环之前,只添加了html_formatting_mid =”“,就像Minion Jim所示。

现在完全可以使用。

答案 2 :(得分:0)

简短的回答是,你可以用附加模式写。 open (filename, 'a')代替open (filename, 'w')。这将添加到文件中已有的内容,因此您可能希望先截断它。