我按照此代码制作了多个窗口。
apiService.fetchDocs().enqueue(new Callback<List<Doctor>>() {
@Override
public void onResponse( Call<List<Doctor>> call, Response<List<Doctor>> response ) {
List<Doctor> doctors = new ArrayList<>();
List<String> docs = new ArrayList<>();
if( response.body() != null ){
doctors.addAll(response.body());
for( int i = 0; i <= doctors.size(); i++ ){
docs.add(doctors.get(i).getName());
}
ArrayAdapter<String> doctorsSpinner = new ArrayAdapter<>(getApplicationContext(), layout.simple_spinner_item, docs);
doctorsSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
doctor.setAdapter(doctorsSpinner);
}else{
Toast.makeText(BookingActivity.this, "0 doctors have been retrieved. \nKindly, contact customer care", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure( Call<List<Doctor>> call, Throwable t ) {
Toast.makeText(BookingActivity.this, "Error: "+t.toString(), Toast.LENGTH_SHORT).show();
}
});
}
假设我在第三个窗口中显示一个消息框,然后焦点更改到第一个窗口。为了解决这个问题,我使用 import tkinter as tk
from tkinter import messagebox
class Win1:
def __init__(self, master):
self.master = master
self.master.geometry("400x300")
self.show_widgets()
def show_widgets(self):
self.frame = tk.Frame(self.master)
self.master.title("Window n.1")
self.create_button("Click to open Window 2", Win2)
self.create_button("Click to open Window 3", Win3)
self.frame.pack()
def create_button(self, text, _class):
"Button that creates a new window"
tk.Button(
self.frame, text=text,
command=lambda: self.new_window(_class)).pack()
def new_window(self, _class):
global win2, win3
try:
if _class == Win2:
if win2.state() == "normal":
win2.focus()
except:
win2 = tk.Toplevel(self.master)
_class(win2)
try:
if _class == Win3:
if win3.state() == "normal":
win3.focus()
except:
win3 = tk.Toplevel(self.master)
_class(win3)
def close_window(self):
self.master.destroy()
class Win2(Win1):
def show_widgets(self):
"A frame with a button to quit the window"
self.master.title("Window 2")
self.frame = tk.Frame(self.master, bg="red")
self.quit_button = tk.Button(
self.frame, text=f"Quit this window n. 2",
command=self.close_window)
self.quit_button.pack()
self.create_button("Open window 3 from window 2", Win3)
self.btn = tk.Button(self.frame, text="hello").pack()
self.btn2 = tk.Button(self.frame, text="exit", command=root.destroy).pack()
self.frame.pack()
class Win3(Win2):
def msg(self):
messagebox.showinfo("box","message")
self.master.focus()
def show_widgets(self):
self.master.title("Window 3")
self.frame = tk.Frame(self.master, bg="green")
self.quit_button = tk.Button(
self.frame, text=f"Quit this window n. 3",
command=self.close_window)
self.label = tk.Label(
self.frame, text="THIS IS ONLY IN THE THIRD WINDOW")
self.btn2 = tk.Button(self.frame, text="exit", command=root.destroy).pack()
self.btn3 = tk.Button(self.frame, text='messagebox', command=self.msg).pack()
self.label.pack()
self.frame.pack()
root = tk.Tk()
app = Win1(root)
root.mainloop()
将焦点带回到第三个窗口,但是当第三个窗口关闭时,焦点转移到第一个窗口而不是第二个窗口。我该如何解决这个问题?