Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengakses Data StringVar dari Satu Halaman Tkinter ke Halaman Lain?
Anda mempunyai berbilang halaman widget yang mengumpul input pengguna dalam aplikasi Tkinter berbilang halaman . Setiap halaman dijadikan sebagai kelas dalam aplikasi utama, tetapi anda menghadapi kesukaran untuk mendapatkan nilai StringVar daripada widget dalam satu halaman (PageOne) dalam halaman lain (PageTwo).
Menggunakan pengawal, anda boleh mewujudkan komunikasi antara halaman. Pertama, simpan rujukan kepada pengawal dalam setiap halaman:
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ... class PageTwo(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ...</code>
Kedua, masukkan kaedah dalam pengawal yang mendapatkan semula halaman berdasarkan nama kelasnya:
<code class="python">class MyApp(Tk): ... def get_page(self, classname): '''Returns an instance of a page given it's class name as a string''' for page in self.frames.values(): if str(page.__class__.__name__) == classname: return page return None</code>
Dengan ini kaedah, halaman boleh mengakses satu sama lain dengan memanggil fungsi ini dan mendapatkan rujukan kepada halaman sasaran. Selepas itu, anda boleh mengakses ahli kongsi halaman itu, seperti:
<code class="python">class PageTwo(ttk.Frame): ... def print_it(self): page_one = self.controller.get_page("PageOne") value = page_one.some_entry.get() print ('The value stored in StartPage some_entry = %s' % value)</code>
Untuk mengelakkan gandingan yang ketat antara halaman, pertimbangkan untuk menyimpan data dikongsi dalam pengawal. Kaedah ini membenarkan halaman bebas daripada reka bentuk dalaman masing-masing:
<code class="python">class MyApp(Tk): def __init__(self): ... self.app_data = {"name": StringVar(), "address": StringVar(), ... }</code>
Ubah suai halaman untuk merujuk pengawal semasa membuat widget:
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller=controller ... self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"], ...) </code>
Akhir sekali, akses data daripada pengawal, hapuskan keperluan untuk get_page:
<code class="python"> def print_it(self): value = self.controller.app_data["address"].get() ...</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Data StringVar dari Satu Halaman Tkinter ke Halaman Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!