Окно Tkinter не открывается и виджеты не отображаются - PullRequest
0 голосов
/ 07 апреля 2020

Я создал программу Tkinter, но ничего не появляется! Если я добавлю root = tk.Tk() в начале __init__(), виджет не появится!

import Tkinter as tk

class Interface(tk.Frame):
    def __init__(self, userKey, root):
        self.userKey = userKey
        tk.Frame.__init__(self, root)
        self.frame = tk.Frame(root)

        btn_users = tk.Button(self.frame, text='Users', command=self.users)
        btn_fullChain = tk.Button(self.frame, text='Chain', command=self.full_chain)
        btn_newTransaction = tk.Button(self.frame, text='New Transaction', command=self.Transaction)

        btn_users.pack()
        btn_fullChain.pack()
        btn_newTransaction.pack()

    def mine(self):
        mining = tk.Label(self.frame, text='Mining the current block, please wait')
        mining.pack()
        mine()
        completedMining = tk.Label(self.frame, text='Completed the mining process')
        mining.pack_forget()
        completedMining.pack()
        time.sleep(3)
        completedMining.pack_forget()

    def users(self):
        for widget in self.frame.winfo_children():
            widget.destroy()
        users = tk.Label(self.frame, text=blockchain.users)
        users.pack()

    def full_chain():
        for widget in self.frame.winfo_children():
            widget.destroy()
        entireChain = tk.Label(self.frame, text=blockchain.chain)
        entireChain.pack()

    def Transaction(self, sender, recipient, amount, signature):
        self.dataTransactions = {'sender': sender, 'recipient': recipient, 'signature': signature, 'amount': amount}
        new_transaction(self.dataTransactions)

    def new_transactions(self):
        for widget in self.frame.winfo_children():
            widget.destroy()

        backBTN = tk.Button(self.frame, text='Back', command=self.main)

        Recipient_Them = tk.Label(self.frame, text='Recipient')
        Recipient_Them.pack()

        Recipient = tk.Text()
        Recipient.pack()

        AmountData = tk.Label(self.frame, text='Amount')
        AmountData.pack()

        Amount = tk.Text()
        Amount.pack()

        SignatureData = tk.Label(self.frame, text='Signature')
        SignatureData.pack()

        Signature = tk.Text()
        Signature.pack()

        self.TransactionRecipient =  Recipient.get('1.0', END)
        self.TransactionAmount = Amount.get('1.0', END)
        self.TransactionSignature = Signature.get('1.0', END)
        self.TransactionSender = self.userKey

        btn_submit = tk.Button(self.frame, text="Submit", command=self.Transaction(self.TransactionSender, self.TransactionRecipient, self.TransactionAmount, self.TransactionSignature))
        btn_submit.grid(row=0, column=0, sticky="nsew")

    def main(self):
        for widget in self.frame.winfo_children():
            widget.destroy()

        btn_users = tk.Button(self.frame, text='Users', command=self.users)
        btn_fullChain = tk.Button(self.frame, text='Chain', command=self.full_chain)
        btn_newTransaction = tk.Button(self.frame, text='New Transaction', command=self.Transaction)

        btn_users.pack()
        btn_fullChain.pack()
        btn_newTransaction.pack()


if __name__ == '__main__':
    from argparse import ArgumentParser

    root = tk.Tk()
    parser = ArgumentParser()

    parser.add_argument('-key', '--nodeKey', default="0", type=str, help='key for this node')
    args = parser.parse_args()
    node_public_key = args.nodeKey

    if node_public_key == "0":
        raise ValueError("You must specify a node key!")

    UI = Interface(node_public_key, root)
    UI.pack()
    root.mainloop()

1 Ответ

0 голосов
/ 07 апреля 2020

Вы помещаете виджеты внутрь self.frame и никогда не звоните pack, place или grid на self.frame.

Непонятно, зачем вы вообще создаете этот фрейм. Interface сам по себе является фреймом, поскольку вы наследуете от tk.Frame. Вы должны удалить self.frame и использовать self везде, а не self.frame. Если вы сделаете это, вы увидите свои кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...