Как постоянно обновлять переменную (используя spinbox с tkinter)? - PullRequest
1 голос
/ 16 марта 2019

У меня в программе две спинбоксы, созданные с помощью tkinter. Я хочу, чтобы переменные, выбранные пользователем, были добавлены в список, чтобы я мог использовать эти значения позже в программе. Проблема, с которой я столкнулся в настоящее время, заключается в том, что значения сохраняются в списке только один раз, и мне не удается их обновить, несмотря на все то, что я пробовал. Чтобы было ясно, я просто хочу два значения в списке, поэтому, когда пользователь выбирает другое число, он заменит правильное значение, сохраненное в списке.

Вот код, который я написал:

from tkinter import *

windowTk = Tk()
pwMain = PanedWindow(windowTk, orient=VERTICAL)
pwTop = PanedWindow(pwMain, orient=HORIZONTAL)

def configTables() :

    sLine = Spinbox(pwTop, from_=0, to=15)
    pwTop.add( Label(pwTop, text = "Combien y a-t-il de lignes de table ?") )
    pwTop.add( sLine )

    sColumn = Spinbox(pwTop, from_=0, to=15)
    pwTop.add( Label(pwTop, text = "Combien y a-t-il de colonnes de tables ?") )
    pwTop.add( sColumn )

    pwTop.pack()

    pwMain.pack()

    global coordTables
    coordTables = []
    coordTables.append( int(sLine.get()) )
    coordTables.append( int(sColumn.get()) )
    return coordTables


print( configTables() )
windowTk.mainloop()

Надеюсь, моя просьба понятна, поэтому вы можете мне помочь.

Спасибо

LoneRetrievr

ОБНОВЛЕНИЕ : я попробовал следующий код, и он работает, но в окне ничего не появляется (окно tkinter остается белым).

from tkinter import *

windowTk = Tk()
pwMain = PanedWindow(windowTk, orient=VERTICAL)
pwTop = PanedWindow(pwMain, orient=HORIZONTAL)

lines = IntVar(windowTk, value=0)
columns = IntVar(windowTk, value=0)

def configTables() :

    sLine = Spinbox(pwTop, from_=0, to=15, textvariable=lines)
    pwTop.add( Label(pwTop, text = "Combien y a-t-il de lignes de tables ?") )
    pwTop.add( sLine )

    sColumn = Spinbox(pwTop, from_=0, to=15, textvariable=columns)
    pwTop.add( Label(pwTop, text = "Combien y a-t-il de colonnes de tables ?") )
    pwTop.add( sColumn )

    pwTop.pack()
    pwMain.pack()

numberLines = lines.get()
numberColumns = columns.get()
print( numberLines, numberColumns )
windowTk.mainloop()

Я знаю, что он напечатает только один раз значения, и это то, что я хочу, чтобы он делал. Вы можете мне помочь ? Я думаю, что это очень просто, но я не понимаю, в чем проблема.

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

это то, что вы хотели бы сделать, я верю.

Я предлагаю вам объектно-ориентированный подход.

Tkinter имеет IntVar () и другие переменные очень мощные.

import tkinter as tk</p>

<p>class App(tk.Frame):</p>

<pre><code>def __init__(self,):

    super().__init__()

    self.master.title("Hello World")
    self.lines = tk.IntVar()
    self.columns = tk.IntVar()
    self.coordTables = []
    self.init_ui()

def init_ui(self):

    self.pack(fill=tk.BOTH, expand=1,)

    f = tk.Frame()

    tk.Label(f, text = "Combien y a-t-il de lignes de tables ?").pack()
    tk.Spinbox(f, from_=0, to=15, textvariable= self.lines).pack()

    tk.Label(f, text = "Combien y a-t-il de colonnes de tables ?").pack()
    tk.Spinbox(f, from_=0, to=15, textvariable= self.columns).pack()

    w = tk.Frame()

    tk.Button(w, text="Print", command=self.on_callback).pack()
    tk.Button(w, text="Reset", command=self.on_reset).pack()
    tk.Button(w, text="Close", command=self.on_close).pack()

    f.pack(side=tk.LEFT, fill=tk.BOTH, expand=0)
    w.pack(side=tk.RIGHT, fill=tk.BOTH, expand=0)


def on_callback(self,):
    args = (self.lines.get(),self.columns.get())
    self.coordTables.append(args)

    print ("Numers of coords: {0}".format(len(self.coordTables)))

    for e,i in self.coordTables:
        print(e,i)

def on_reset(self):
    self.lines.set(0)
    self.columns.set(0)
    self.coordTables = []

def on_close(self):
    self.master.destroy()
</code>

если имя == ' main ':

app = App() app.mainloop()
0 голосов
/ 16 марта 2019

Вы можете использовать IntVar для подключения спин-боксов к переменным Python. Я расширил вашу программу с примером. Добавлена ​​кнопка для печати текущего значения полей прокрутки:

from tkinter import *

windowTk = Tk()
pwMain = PanedWindow(windowTk, orient=VERTICAL)
pwTop = PanedWindow(pwMain, orient=HORIZONTAL)
lignes = IntVar(windowTk, value=0)
colonnes = IntVar(windowTk, value=0)

def print_vars():
    print(lignes.get(), colonnes.get())

def configTables() :

    sLine = Spinbox(pwTop, from_=0, to=15, textvariable=lignes)
    pwTop.add( Label(pwTop, text = "Combien y a-t-il de lignes de table ?") )
    pwTop.add( sLine )

    sColumn = Spinbox(pwTop, from_=0, to=15, textvariable=colonnes)
    pwTop.add( Label(pwTop, text = "Combien y a-t-il de colonnes de tables ?") )
    pwTop.add( sColumn )

    pwTop.pack()

    b = Button(pwMain, text='print', command=print_vars)
    b.pack(side=BOTTOM)

    pwMain.pack()

    global coordTables
    coordTables = []
    coordTables.append( int(sLine.get()) )
    coordTables.append( int(sColumn.get()) )
    return coordTables


print( configTables() )
windowTk.mainloop()

Обратите внимание, я не удалил вещи, которые больше не нужны, например, переменную coordTables и инструкцию return.

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