• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - połączenie zmiennej i metedy select()

VPS Starter Arubacloud
+1 głos
198 wizyt
pytanie zadane 29 grudnia 2022 w Python przez neo1020 Dyskutant (8,430 p.)

Cześć

Próbuję dalej swoich sił z python'em niby miał być tak łatwy jak PHP a tu nie 

mam kwadratowe okno w którym są 2 radiobutton i opis

 lab = tk.Label(fra, text="Wybierz wygląd okna")
    lab.pack(padx=1, pady=1)

    var = IntVar()
    R1 = Radiobutton(app, text="WHITE", variable=var, value=1)
    R1.place(x=25, y=30)
    # R1.select()

    R2 = Radiobutton(app, text="DARK", variable=var, value=2)
    R2.place(x=115, y=30)

utworzyłem w katalogu plik konfiguracyjny config.ini, który się wczytuje i działa

from configparser import ConfigParser
config = ConfigParser()
config.read('config.ini')
print(config.get('main','radio'))
print(config['main']['radio'])

E = config['main']['radio']
E.select()
config['main']['radio'].select()

i potrzebuję połączyć to co odbieram z config czyli E lub config['main']['radio']  z select()

czyli to co robi w kodzie na samej górze

 # R1.select()

a wyskakuje mi błąd

AttributeError: 'str' object has no attribute 'select'

_blank

Przejrzałem już wszystko co było z tym związane, i wszyscy używają print, print też działa u mnie

Proszę naprowadźcie mnie co robię źle, jeżeli ktoś ma wiedzę w tym temacie

Z góry dziękuję 

2 odpowiedzi

0 głosów
odpowiedź 29 grudnia 2022 przez VBService Ekspert (251,210 p.)
wybrane 29 grudnia 2022 przez neo1020
 
Najlepsza

Z pliku config tak jak napisał Tobie @adrian17; dane pobierane są jako tekst (string) wtedy możesz zrobić np.

lab = tk.Label(fra, text="Wybierz wygląd okna")
   lab.pack(padx=1, pady=1)
 
   var = IntVar()
   R1 = Radiobutton(app, text="WHITE", variable=var, value=1)
   R1.place(x=25, y=30)
   # R1.select()
 
   R2 = Radiobutton(app, text="DARK", variable=var, value=2)
   R2.place(x=115, y=30)

   config = ConfigParser()
   config.read('config.ini')
   print(config.get('main','radio'))
   print(config['main']['radio'])
  
   E = config['main']['radio']

   if E == 'R1':
       R1.select()

   itd. itp.

 

BTW

config.get()
config[][]

Return a string value for the named option.
config.getint() Like get(), but convert value to an integer.
config.getfloat() Like get(), but convert value to a float.
config.getboolean()  Like get(), but convert value to a boolean. Returns False or True.

 

parser = configparser.ConfigParser()

W tej klasie zdefiniowane są następujące metody

sections() Return all the configuration section names.
has_section() Return whether the given section exists.
has_option() Return whether the given option exists in the given section.
options() Return list of configuration options for the named section.
read() Read and parse the named configuration file.
read_file() Read and parse one configuration file, given as a file object.
read_string() Read configuration from a given string.
read_dict() Read configuration from a dictionary. Keys are section names, values are dictionaries with keys and values that should be present in the section.
get() Return a string value for the named option.
getint() Like get(), but convert value to an integer.
getfloat() Like get(), but convert value to a float.
getboolean() Like get(), but convert value to a boolean. Returns False or True.
items() return a list of tuples with (name, value) for each option in the section.
remove_section() Remove the given file section and all its options.
remove_option() Remove the given option from the given section.
set() Set the given option.
write() Write the configuration state in .ini format.
komentarz 29 grudnia 2022 przez neo1020 Dyskutant (8,430 p.)

no właśnie o to mi chodziło

właśnie widziałem tą tabelkę ale nie dotarło do mnie że pierwsza opcja zwraca string i mogę to tak zrobić jak napisałeś

ale ja jestem tępy

Dziękuję wam za pomoc

 

1
komentarz 29 grudnia 2022 przez VBService Ekspert (251,210 p.)

ale ja jestem tępy

nie myśl tak o sobie, po prostu się uczysz. laugh

1
komentarz 29 grudnia 2022 przez VBService Ekspert (251,210 p.)

BTW, w wersji Python-a od 3.10.4 wzwyż (AFIAK) możesz rozważyć użycie match zamiast if-ów (taki prawie odpowiednik np. switch-a z js) przykład użycia match: link.

1
komentarz 29 grudnia 2022 przez neo1020 Dyskutant (8,430 p.)
uczę, szkoda że nie systematycznie, bo nie raz wracam po 2 tygodniach przerwy i już mam sklerozę, dzięki za info na pewno to wypróbuje do nauki

ale mam pomysły po nowym rok jak wrócę do pracy na naukę python + PLC(omron) albo webOS - jakoś tak
+1 głos
odpowiedź 29 grudnia 2022 przez adrian17 Ekspert (344,100 p.)
Chwila, nie rozumiem co ma jedno do drugiego.

W pierwszym kodzie masz zmienną R1 która jest buttonem i używając .select() go zaznaczasz.

W drugim kodzie wyciągasz z configa z pola "radio" jakiś tekst... ale ten tekst nie jest buttonem, więc nie ma sensu "zaznaczanie" go.

A w trzecim co napisałeś, w ogóle nie wiem co ma print() do tego.

Możesz napisać, co w zasadzie chcesz zrobić? Tak najbardziej ogólnie.
komentarz 29 grudnia 2022 przez neo1020 Dyskutant (8,430 p.)
edycja 29 grudnia 2022 przez neo1020

Chciałbym plik config wczytać do programu GUI w pythonie 

tak aby po wczytaniu miałbym zaznaczony radiobutton R1, który jest zapisany w pliku config jak niżej

W drugim kodzie wyciągasz z configa z pola "radio" jakiś tekst... ale ten tekst nie jest buttonem, więc nie ma sensu "zaznaczanie" go.

_blank

Dokładnie tak aby to R1.select()

R1 = Radiobutton(app, text="WHITE", variable=var, value=1)
R1.place(x=25, y=30)
R1.select()

działało jak E.select() czyli aby E do którego próbuje przypisać dane niewciągnięte z pliku config.ini było jako R1 i zaznaczało mi radiobutton który jest w config.ini

from configparser import ConfigParser
config = ConfigParser()
config.read('config.ini')
print(config.get('main','radio'))
print(config['main']['radio'])
 
E = config['main']['radio']
E.select()

ale ten tekst nie jest buttonem, więc nie ma sensu "zaznaczanie" go.

Jak zrobić aby ten tekst zaznaczał mi radiobutton 

R1 = Radiobutton(app, text="WHITE", variable=var, value=1)
R1.place(x=25, y=30)
# R1.select()

to R1.select() chce wyciągnąć z pliku config i wczytać jako zmienną odnoszącą się właśnie do radiobutton

1
komentarz 29 grudnia 2022 przez adrian17 Ekspert (344,100 p.)

OK, innymi słowy: chcesz żeby tekst w configu mówił, który guzik ma wyć wciśnięty.

Ale no... masz już IntVar który jest spięty z tymi guzikami. Config nie powinien być nijak spięty z nazwami zmiennych.

Wystarczy że wywołasz

var.set(1) # opcja WHITE zaznaczona
var.set(2) # opcja DARK zaznaczona

 

1
komentarz 29 grudnia 2022 przez VBService Ekspert (251,210 p.)
edycja 29 grudnia 2022 przez VBService

Fakt, przeoczyłem ten zapis, ale rozszerzę nieco przykład

config.ini

[main]
theme_color = 2

; theme_color
; WHITE = 1	 DARK = 2
...
from configparser import ConfigParser

config = ConfigParser()
config.read('config.ini') 

...

RThemeColor = IntVar()
R1 = Radiobutton(app, text="WHITE", variable=RThemeColor, value=1)
R1.place(x=25, y=30)         
R2 = Radiobutton(app, text="DARK", variable=RThemeColor, value=2)
R2.place(x=115, y=30)

RThemeColor.set(config['main']['theme_color'])

 

Podobne pytania

0 głosów
2 odpowiedzi 1,286 wizyt
pytanie zadane 7 listopada 2022 w Python przez niezalogowany
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 3 lipca 2018 w PHP przez ojejj Początkujący (350 p.)
0 głosów
2 odpowiedzi 196 wizyt
pytanie zadane 5 lutego 2020 w C i C++ przez ullortnaci Nowicjusz (220 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...