Увеличьте число и покажите этот номер в поле ввода. - PullRequest
2 голосов
/ 15 февраля 2020

Я создал глобальное количество имен переменных

import tkinter as tk
from tkinter import ttk
import os
from csv import DictWriter, DictReader

data_label_frame=tk.LabelFrame()
data_label_frame.pack()

LARGE_FONT = ('Verdana' , 16,'bold')
global count
count=0
class sea_of_btc(tk.Tk):
    def __init__(self , *args , **kwargs):

        tk.Tk.__init__(self, *args , **kwargs)
        container = tk.Frame(self)
        container.pack(side = "top" , fill = "both" , expand = True)

        container.grid_rowconfigure(0 , weight =1 )
        container.grid_columnconfigure(0 , weight =1)
        self.config(background='#FAEBEF')
        self.frames = {}

        for F in (start_page , page_one ):
            frame = F(container , self)
            self.frames [F] = frame
            frame.grid (row = 0 , column = 0 , sticky= "nsew")
        self.show_frame(start_page)


    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
        return frame

class start_page(tk.Frame):
    def __init__(self , parent , controller ):
        tk.Frame.__init__(self, parent)

Вот теперь я хочу, чтобы всякий раз, когда будет вызываться register_fun c, будет увеличиваться число номеров, и после этого всякий раз, когда я открываю фрейм, он показывает мне, что номер в поле ввода, и пользователь не может изменить этот номер, это означает, что он просто работает, чтобы серийный номер отображался в поле ввода

class page_one (tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        registration_number = tk.Label(data_label_frame, text = 'Registration No :', font = LARGE_FONT)
        registration_number.grid(row=0,column=0,padx=5  , pady=5 , sticky =tk.W )

        registration_number_var=tk.StringVar()
        registration_number_entry = ttk.Entry(data_label_frame,width = 5, font=LARGE_FONT ,textvariable=registration_number_var,
                                              )

        registration_number_entry.grid(row =1, column =0,padx=10,pady=10 , ipady=5 , sticky=tk.E)

        def register_fucn():
            count += 1
            with open('new.csv', 'a', newline='') as data_file:
                dict_writer = DictWriter(data_file, fieldnames=['Registration No',
                                                               ])
        registar_btn = ttk.Button(data_label_frame , text ='Registar' ,command= register_fucn)
        registar_btn.grid(row=2 , column=1, sticky =tk.E , padx=10 , pady=10,ipady=5)

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Попробуйте использовать global внутри функции

import tkinter as tk
from tkinter import ttk
import os
from csv import DictWriter, DictReader

data_label_frame=tk.LabelFrame()
data_label_frame.pack()

LARGE_FONT = ('Verdana' , 16,'bold')
count = 0
class sea_of_btc(tk.Tk):
    def __init__(self , *args , **kwargs):

        tk.Tk.__init__(self, *args , **kwargs)
        container = tk.Frame(self)
        container.pack(side = "top" , fill = "both" , expand = True)

        container.grid_rowconfigure(0 , weight =1 )
        container.grid_columnconfigure(0 , weight =1)
        self.config(background='#FAEBEF')
        self.frames = {}

        for F in (start_page , page_one ):
            frame = F(container , self)
            self.frames [F] = frame
            frame.grid (row = 0 , column = 0 , sticky= "nsew")
        self.show_frame(start_page)


    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
        return frame

class start_page(tk.Frame):
    def __init__(self , parent , controller ):
        tk.Frame.__init__(self, parent)


class page_one (tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        registration_number = tk.Label(data_label_frame, text = 'Registration No :', font = LARGE_FONT)
        registration_number.grid(row=0,column=0,padx=5  , pady=5 , sticky =tk.W )

        registration_number_var=tk.StringVar()
        registration_number_entry = ttk.Entry(data_label_frame,width = 5, font=LARGE_FONT ,textvariable=registration_number_var,
                                              )

        registration_number_entry.grid(row =1, column =0,padx=10,pady=10 , ipady=5 , sticky=tk.E)

        def register_fucn():
            global count
            count += 1
            with open('new.csv', 'a', newline='') as data_file:
                dict_writer = DictWriter(data_file, fieldnames=['Registration No',
                                                               ])
        registar_btn = ttk.Button(data_label_frame , text ='Registar' ,command= register_fucn)
        registar_btn.grid(row=2 , column=1, sticky =tk.E , padx=10 , pady=10,ipady=5)
0 голосов
/ 15 февраля 2020

Выполните следующие действия, чтобы пользователь не мог изменить номер в виджете Entry, увеличивая число каждый раз, когда нажимается Button.

  • Глобализация переменная, хранящая номер, который вы хотите показать, внутри функции.
  • Измените state виджета Entry на NORMAL после глобализация переменной.
  • Увеличьте переменную так, как вам нужно.
  • Затем insert переменная внутри виджета Entry.
  • Наконец, измените state виджета Entry на DISABLED.

Как я сделал в этом Пример:

import tkinter as tk

var = 10


def func(en):
    global var

    en.configure(state=tk.NORMAL)

    en.delete(0, tk.END)
    var = var + 1
    en.insert(0, var)
    en.configure(state=tk.DISABLED)


root = tk.Tk()

e = tk.Entry(root)
e.pack()

b = tk.Button(root, text='Click', command=lambda: func(e))
b.pack()

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