Tkinter, как остановить ввод 0 в начале, если не следует десятичная точка - PullRequest
0 голосов
/ 10 мая 2018
from tkinter import *
def setup():
    master = Tk()
    string_converter_main = StringVar()
    entry1 = Entry(master, width = "13", textvariable = string_converter_main, font = ("Helvetica", 23), bg="gray13", fg = "ghostwhite", bd="10")
    entry1.grid(row=1, column=0, columnspan=5, sticky=W+E+S+N)

setup()

Это немного моего кода, который я использую для своего калькулятора Python Tkinter. Это долго, чтобы поставить все, но проблема, с которой я сталкиваюсь, заключается в том, что вы можете сначала ввести 0 в записи, а затем поставить нормальное число после него. Например, я могу набрать 0, а затем 5, и в моей записи будет написано 05. Как я могу сделать это удалить 0 и заменить его, если только после него не следует десятичная точка или если перед ним уже есть число. Также как остановить ввод нескольких множественных нулей в запись.

1 Ответ

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

Я бы проверил поле с помощью оператора if / else.

Обновление:

Вот моя следующая попытка, основанная на ваших комментариях. Я не уверен на 100%, что это сработает отлично, но после моих испытаний он пытается сделать то, что вы хотите.

Я создал несколько условных операторов if / else, которые будут проверять, существует ли конкретная комбинация символов в строке. Если это так, то переформатируйте, чтобы удалить ноль.

Посмотрите на приведенный ниже код.

import tkinter as tk
from tkinter import messagebox

master = tk.Tk()

string_converter_main = tk.StringVar()
entry1 = tk.Entry(master, width = "33", textvariable = string_converter_main, font = ("Helvetica", 23), bg="gray13", fg = "ghostwhite", bd="10")
entry1.grid(row=1, column=0, columnspan=5, sticky="nsew")


def check_format_of_string(event):
    if event.keysym not in ["BackSpace", "Control_L", "Control_R", "Delete"] and "0" in entry1.get():
        word_list = entry1.get().split(" ")
        reformated_word_list = []
        final_string = ""
        for word_section in word_list:
            if word_section[:2] in ["01", "02", "03", "04", "05", "06", "07", "08", "09"]:
                reformated_word_list.append(word_section[1:])
            elif word_section == "00":
                reformated_word_list.append("")
            else:
                reformated_word_list.append(word_section)

        for item in reformated_word_list:
            cs = "{} {}".format(final_string, item)
            if cs[-3:] in ["0 ", " 0 "]:
                cs = cs[:-2]
            if cs[-2:] in ["  "]:
                cs = cs[:-1]

            final_string = cs

        entry1.delete(0, "end")
        entry1.insert(0, final_string.lstrip())

entry1.bind("<Key>",check_format_of_string)

master.mainloop()
...