Почему класс MailDefinition требует Системы. Сеть. UI.Control?

Вы можете сохранить значения для каждого числа в отдельных переменных IntVar, затем получить значения этих переменных внутри функции solver и выполнить все операции, которые есть во втором коде. Код должен быть модульным с использованием класса, содержащего функции, которые создают виджеты и запускают код solver. Чтобы узнать больше о объявлениях на основе классов в Tkinter, прочитайте , это .

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()

14
задан John Bubriski 26 January 2012 в 18:28
поделиться

3 ответа

Обычно вы просто передаете это в качестве элемента управления.

MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);

Что касается причины, по которой здесь говорит MSDN:

Параметр owner указывает, какой элемент управления является родительским для элемента управления MailDefinition. Он определяет, в каком каталоге искать текстовый файл, указанный в свойстве BodyFileName.

5
ответ дан 1 December 2019 в 15:02
поделиться

Похоже, вам вообще не нужно использовать класс MailDefinition, если вы не привязаны к каким-либо элементам управления. Чтобы просто отправить электронное письмо по SMTP, вы должны использовать System.Net.Mail.SmtpClient с System.Net.Mail.MailMessage.

0
ответ дан 1 December 2019 в 15:02
поделиться

Я использовал new LiteralControl () для третьего параметра, потому что мои сообщения отправляются из рабочего процесса. Оно работает. Но у меня нет ответа на вопрос «Почему».

1
ответ дан 1 December 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: