Передача аргументов функциям в tkinter - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь настроить функцию графического интерфейса, которая позволяет пользователям нажимать кнопку, а затем проверять / вводить новые слова в категориях «существительные», «глаголы», «прилагательные» и т. Д. У меня есть программаустановить ссылки. TXT-файлы, сохраненные в том же каталоге, что и программа.

Я не смог передать аргументы кнопкам, и ответы, которые я нашел, предлагают использовать лямбда-функции в в некоторых простых ситуациях .Программа работает, если я удаляю все переданные аргументы и просто назначаю определенный файл (farsi_nouns и т. Д.) Внутри каждой функции.Я не могу сказать, правильно ли я это делаю или Tkinter - слишком простой графический интерфейс для передачи аргументов функциям таким образом.Большое спасибо за любые отзывы!

Tkinter ver.8.5, Python 3.5.2, OSx High Sierra 10.13.4.

file_in_use = 'farsi_words'

def defaultFile(filename):
    file_in_use = filename
    return file_in_use

bN = Button(f0, text = 'Nouns', command =lambda: defaultFile('farsi_words'))
bN.pack(side='left')
bN.bind("<Button-1>",
bV = Button(f0, text = 'Verbs', command =lambda: defaultFile('farsi_verbs'))
bV.pack(side='left')
bA = Button(f0, text = 'Adjectives', command =lambda: defaultFile('farsi_adjectives'))
bA.pack(side='left')
bP = Button(f0, text = 'Prepositions', command =lambda: defaultFile('farsi_preps'))
bP.pack(side='left')

def commit(file_in_use):
    word = e1.get()
    definition = e2.get()
    appendFile = open(file_in_use, 'a')#was this defined before def? 
    appendFile.write('\n' + word + ': ' + definition)
    appendFile.close()
    e1.delete(0, 'end')
    e2.delete(0, 'end')

def review(file_in_use):
    t1.delete('1.0', END)
    readFile = open(file_in_use, 'r') 
    size = 0
    splitList = []
    for line in readFile:
        splitWord = line.split(':')
        splitWord = splitWord[0].strip('\n ')
        splitList.append(splitWord)
        size += 1

    n = random.randint(0, size - 1)
    t1.insert(INSERT, splitList[n] + '\n')
    readFile.close()

def answer(file_in_use):
    word = e3.get()
    def1 = t1.get('1.0','end-1c')
    def1 = def1.strip('\n')
    readFile = open(file_in_use, 'r') 
    for line in readFile:
        splitWord = line.split(': ')
        if def1 == splitWord[0].strip('\n'):
            if word == splitWord[1].strip('\n'):
                t1.insert(INSERT, 'Good job!')
            else:
                t1.insert(INSERT, 'Not quite! Good try =)')
    readFile.close()

def hint(file_in_use):
    def1 = t1.get('1.0','2.0')
    def1 = def1.strip('\n')
    readFile = open(file_in_use, 'r')

    for line in readFile:
        splitWord = line.split(': ')
        if def1 == splitWord[0].strip('\n'):
            hint = splitWord[1]

    hint1 = t1.get('2.0','end-1c')
    lenHint1 = len(hint1)
    if lenHint1 >= len(hint):
        pass
    else:
        t1.insert(INSERT, hint[lenHint1])
        print (hint1)
    readFile.close()

1 Ответ

0 голосов
/ 24 мая 2018

Вы можете легко передавать аргументы, если поместите свой код в класс.Другая вещь - это функция tkinters .after(), которую вы можете попробовать.Я сделал простой графический интерфейс для демонстрации обоих.

import tkinter as tk
from tkinter import *


class GUI:

    def __init__(self, master):
        self.file_in_use = 'farsi_words'
        self.master = master
        self.bN = Button(master, text = 'Nouns', command = self.farsi_words)
        self.bN.pack(side='left')
        self.bN.bind("<Button-1>")
        self.bV = Button(master, text = 'Verbs', command = self.farsi_verbs)
        self.bV.pack(side='left')
        self.bA = Button(master, text = 'Adjectives', command = self.farsi_adjectives)
        self.bA.pack(side='left')
        self.bP = Button(master, text = 'Prepositions', command = self.farsi_preps)
        self.bP.pack(side='left')

    def farsi_words(self, event=None):
        self.file_in_use = 'Nouns'
        self.master.after(1, self.commit)

    def farsi_verbs(self, event=None):
        self.file_in_use = 'Verbs'
        self.master.after(1, self.commit)

    def farsi_adjectives(self, event=None):
        self.file_in_use = 'Adjectives'
        self.master.after(1, self.commit)

    def farsi_preps(self, event=None):
        self.file_in_use = 'Prepositiones'
        self.master.after(1, self.commit)

    def commit(self, event=None):
        print(self.file_in_use)

if __name__ == "__main__":
    root = Tk()
    my_gui = GUI(root)
    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...