Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Не удаётся получить значение из tk.Spinbox. Как исправить? [RSS Feed]

#1 Дек. 20, 2017 09:32:35

August
Зарегистрирован: 2017-12-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся получить значение из tk.Spinbox. Как исправить?

 import tkinter as tk
from tkinter import ttk
class Gui:
    def __init__(self):
    	
        self.application_window = tk.Tk()
        self.add_modifier = tk.IntVar()
        self.create_widgets()
    def create_widgets(self):
        add_modifier = tk.Spinbox(self.application_window, from_=0, to=999)
        add_modifier.pack()
        button = ttk.Button(self.application_window, text='check', command=self.check)
        button.pack()
    def check(self):
        print(self.add_modifier.get())
program = Gui()
program.application_window.mainloop()

Почему get() всегда возвращает ноль, вне зависимости от того, какое число выставлено в tk.Spinbox на момент нажатия кнопки? Как это исправить?

Отредактировано August (Дек. 20, 2017 09:33:18)

Офлайн

#2 Дек. 20, 2017 10:18:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не удаётся получить значение из tk.Spinbox. Как исправить?

 import tkinter as tk
from tkinter import ttk
  
class Gui:
    def __init__(self):
        self.application_window = tk.Tk()
        self.create_widgets()
  
    def create_widgets(self):
        self.add_modifier = tk.Spinbox(self.application_window, from_=0, to=999)
        self.add_modifier.pack()
        button = ttk.Button(self.application_window, text='check', command=self.check)
        button.pack()
  
    def check(self):
        print(self.add_modifier.get())
 
 
program = Gui()
program.application_window.mainloop()



Офлайн

#3 Дек. 20, 2017 11:08:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Не удаётся получить значение из tk.Spinbox. Как исправить?

FishHook
 self.add_modifier = tk.Spinbox
Не, там надо переменные делать. Просто он спинбокс не подключил к переменной.


  
#!/usr/bin/env python3
 
import tkinter as tk
from tkinter.constants import *
 
class App(tk.Frame):
 
    def __init__(self, master=None):
        super().__init__(master)
        self.pack(fill=BOTH)
        self.create_widgets()
 
    def create_widgets(self):
        self.spin_box_var = tk.IntVar()
        self.spin_box = tk.Spinbox(
            self, from_=0, to=999, textvariable=self.spin_box_var)
        self.spin_box.pack()
        self.button_ok = tk.Button(self)
        self.button_ok.pack()
        self.button_ok.config(text='Ok', command=self.push_button_ok)
 
    def push_button_ok(self):
        print(self.spin_box_var.get())
 
 
if __name__ == '__main__':
    root = tk.Tk()
    win = App(root)
    win.master.title('Window')
    win.master.geometry('300x70+500+500')
    root.mainloop()



Отредактировано py.user.next (Дек. 20, 2017 11:09:33)

Офлайн

#4 Дек. 20, 2017 12:28:18

August
Зарегистрирован: 2017-12-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Не удаётся получить значение из tk.Spinbox. Как исправить?

Спасибо! Работает и первый, более простой вариант от FishHook. А в чём преимущество подключения дополнительной переменной, как у py.user.next?

Меня сбило с толку, что для разных виджетов почему-то разные способы. Например в случае с ttk.Checkbutton никакой self. приписывать спереди не надо, а просто переменная прописывается в атрибутах.

 dismiss_the_lowest = ttk.Checkbutton(self.application_window, variable=self.dismiss_the_lowest)
И после этого get() замечательно работает.

Офлайн

#5 Дек. 20, 2017 12:37:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Не удаётся получить значение из tk.Spinbox. Как исправить?

August
А в чём преимущество подключения дополнительной переменной, как у py.user.next?
В том, что ты не привязан к элементу ввода. То есть в данный момент ты общаешься только с переменной и пишешь код только для неё. А то, что она связана со спинбоксом, этот код не знает. Таким образом ты легко можешь заменить элемент ввода на другой и при этом код, обрабатыващий переменную, этого даже не заметит. Так ты можешь менять внешний вид графического интерфейса без переписывания тонн кода.



Отредактировано py.user.next (Дек. 20, 2017 12:38:13)

Офлайн

  • Начало
  • » GUI
  • » Не удаётся получить значение из tk.Spinbox. Как исправить?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version