簡體   English   中英

如何將我的python代碼集成到我的tkinter接口?

[英]How to Integrate my python code to my tkinter interface?

我編寫了一個程序,用戶在其中輸入目標號碼和其他4個數字作為目標號碼。 現在,我很難將我的tkinter接口集成到我的代碼中。 所以我希望有人能幫助我

Tkinter界面:

window = Tk()
window.title("target number solution")
Label(window,image='', bg="white") .grid(row=0, column=0, sticky=W)
Label(window, text="Enter target number:",bg="black", fg="white", font="none 12 bold").grid(row=1, column=0, sticky=N)
textentry = Entry(window, width=20, bg="white")
textentry.grid(row=2, column=0, sticky=N)


Label(window, text="Enter first number:",bg="black", fg="white", font="none 12 bold").grid(row=4, column=0, sticky=N)
textentry = Entry(window, width=20, bg="white")
textentry.grid(row=5, column=0, sticky=N)


Label(window, text="Enter second number:",bg="black", fg="white", font="none 12 bold").grid(row=6, column=0, sticky=N)
textentry = Entry(window, width=20, bg="white")
textentry.grid(row=7, column=0, sticky=N)


Label(window, text="Enter third number:",bg="black", fg="white", font="none 12 bold").grid(row=8, column=0, sticky=N)
textentry = Entry(window, width=20, bg="white")
textentry.grid(row=9, column=0, sticky=N)


Label(window, text="Enter fourth number:",bg="black", fg="white", font="none 12 bold").grid(row=10, column=0, sticky=N)
textentry = Entry(window, width=20, bg="white")
textentry.grid(row=11, column=0, sticky=N)


Button(window, text="Solve", width=6, command=solver).grid(row=12, column=0, sticky=N)
output = Text(window, width=60, height=10, wrap=WORD, background="white")
output.grid(row=13, column=0, columnspan=1, sticky=N)


window.mainloop()

這就是界面的樣子

這是需要與tkinter接口鏈接的代碼:

from itertools import permutations,combinations_with_replacement
numbers   = []
target    = int(input())
operators = ["+","-","*","/"]
groups    = ['X+X+X+X', 'X+X+(X+X)', 'X+(X+X)+X', '(X+X+X)+X', '(X+X)+X+X', 'X+(X+X+X)', '((X+X)+X)+X', 'X+(X+(X+X))', 'X+((X+X)+X)', '(X+X)+(X+X)', '(X+(X+X))+X']
seen      = set()
for values in permutations(numbers,len(numbers)):
    for operCombo in combinations_with_replacement(operators,len(numbers)-1):
        for oper in permutations(operCombo,len(numbers)-1):
            formulaKey = "".join(oper+values)
            if formulaKey in seen: continue # ignore variations on parentheses alone
            for pattern in groups:
                formula = "".join(o+p for o,p in zip([""]+list(oper), pattern.split("+")))
                formula = "".join(v+p for v,p in zip([""]+list(values),formula.split("X")))
                try:
                    if eval(formula) == target:
                        global Answer
                        Answer = formula,"=",target
                        print(formula,"=",target)
                        seen.add(formulaKey)
                        break
                except: pass

所有建議將被應用

您可以將每個數字的值存儲在單獨的IntVar變量中,然后在solver函數中獲取這些變量的值,並執行第二個代碼中的所有操作。 應該使用包含用於創建窗口小部件並運行solver代碼的函數的類對代碼進行模塊化。 要了解有關Tkinter中基於類的聲明的更多信息,請閱讀this

from tkinter import Tk, Frame, Label, Button, IntVar, Entry, Text, W, N, WORD, INSERT
from itertools import permutations,combinations_with_replacement



class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets() 


    def create_widgets(self):

        self.target_num = IntVar()
        self.num1 = IntVar()
        self.num2 = IntVar()
        self.num3 = IntVar()
        self.num4 = IntVar()       
        # self.title("target number solution")

        Label(self,image='', bg="white").grid(row=0, column=0, sticky=W)
        Label(self, text="Enter target number:", bg="black", fg="white", font="none 12 bold").grid(row=1, column=0, sticky=N)
        self.textentry1 = Entry(self, textvariable=self.target_num, width=20, bg="white")
        self.textentry1.grid(row=2, column=0, sticky=N)


        Label(self, text="Enter first number:",bg="black", fg="white", font="none 12 bold").grid(row=4, column=0, sticky=N)
        self.textentry2 = Entry(self, textvariable=self.num1, width=20, bg="white")
        self.textentry2.grid(row=5, column=0, sticky=N)


        Label(self, text="Enter second number:",bg="black", fg="white", font="none 12 bold").grid(row=6, column=0, sticky=N)
        self.textentry3 = Entry(self, textvariable=self.num2, width=20, bg="white")
        self.textentry3.grid(row=7, column=0, sticky=N)


        Label(self, text="Enter third number:",bg="black", fg="white", font="none 12 bold").grid(row=8, column=0, sticky=N)
        self.textentry3 = Entry(self, textvariable=self.num3, width=20, bg="white")
        self.textentry3.grid(row=9, column=0, sticky=N)


        Label(self, text="Enter fourth number:",bg="black", fg="white", font="none 12 bold").grid(row=10, column=0, sticky=N)
        self.textentry4 = Entry(self, textvariable=self.num4, width=20, bg="white")
        self.textentry4.grid(row=11, column=0, sticky=N)


        Button(self, text="Solve", width=6, command=self.solver).grid(row=12, column=0, sticky=N)
        self.output = Text(self, width=60, height=10, wrap=WORD, background="white")
        self.output.grid(row=13, column=0, columnspan=1, sticky=N)

    def solver(self):
        target = self.target_num.get()
        number1 = self.num1.get()
        number2 = self.num2.get()
        number3 = self.num3.get()
        number4 = self.num4.get()
        numbers = [number1, number2, number3, number4]
        operators = ["+","-","*","/"]
        groups    = ['X+X+X+X', 'X+X+(X+X)', 'X+(X+X)+X', '(X+X+X)+X', '(X+X)+X+X', 'X+(X+X+X)', '((X+X)+X)+X', 'X+(X+(X+X))', 'X+((X+X)+X)', '(X+X)+(X+X)', '(X+(X+X))+X']
        seen = set()
        for values in permutations(numbers,len(numbers)):
            for operCombo in combinations_with_replacement(operators,len(numbers)-1):
                for oper in permutations(operCombo,len(numbers)-1):
                    formulaKey = "".join(str(oper+values))
                    if formulaKey in seen: continue # ignore variations on parentheses alone
                    for pattern in groups:
                        formula = "".join(str(o)+str(p) for o,p in zip([""]+list(oper), pattern.split("+")))
                        formula = "".join(str(v)+str(p) for v,p in zip([""]+list(values),formula.split("X")))
                        try:
                            if eval(formula) == target:                              
                                Answer = formula,"=",target
                                print(formula,"=",target)
                                seen.add(formulaKey)
                                #insert value in output Textbox
                                self.output.insert(INSERT, Answer) 
                                self.output.insert(END, '\n') 
                                break
                        except: pass

root = Tk()
app = Application(master=root)
app.master.title("target number solution")
app.mainloop()

您可以更改/嘗試的幾件事:

  • 保持“條目”變量唯一。 然后使用.get()命令提取每個數字。
  • 在按鈕的命令選項中使用lambda,如下所示:

    命令= lambda:解算器(num1,num2,num3,num4)

  • 如果要顯示從“求解器”返回的號碼,請在tkinter窗口中網格一個Label。 然后使用Label.config(text="Your number here")在tkinter窗口中顯示它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM