问题描述
我了解了有关在打印时使用命名参数的信息,
import gi
gi.require_version('Gtk','3.0')
gi.require_version('WebKit','3.0')
from gi.repository import Gtk,WebKit
class Main:
def __init__(self):
self.win = Gtk.Window()
self.win.set_position(Gtk.WindowPosition.CENTER)
self.win.set_title('window')
self.win.set_default_size(1200,800)
self.btn_grid = Gtk.Grid()
self.btn_grid.set_column_spacing(10)
self.reload_button = Gtk.Button('Reload')
self.reload_button.connect('clicked',self.reload_window)
self.btn_grid.attach(self.reload_button,1,1)
self.url_entry = Gtk.Entry()
self.url_entry.set_hexpand(True)
self.url_entry.connect('activate',self.display_url)
self.btn_grid.attach(self.url_entry,1)
self.go_btn = Gtk.Button('Go')
self.go_btn.connect('clicked',self.display_url)
self.btn_grid.attach(self.go_btn,2,1)
self.main_Box = Gtk.VBox()
self.main_Box.pack_start(self.btn_grid,False,0)
self.win.add(self.main_Box)
self.webview = WebKit.WebView()
self.webview.connect('title-changed',self.title_update)
self.webview.load_uri("https://google.com")
self.scroll_area = Gtk.ScrolledWindow()
self.scroll_area.add(self.webview)
self.main_Box.pack_start(self.scroll_area,True,0)
self.win.connect('destroy',Gtk.main_quit)
def title_update(self,webview,frame,title):
self.win.set_title(f'window - {title}')
def display_url(self,event):
url = self.url_entry.get_text()
if url == '':
pass
else:
if "://" not in url:
url = f'https://{url}'
self.webview.load_uri(url)
self.webview.grab_focus()
def reload_window(self):
self.webview.reload()
def w_open(self):
self.win.show_all()
main_window = Main()
main_window.w_open()
Gtk.main()
我不知道如何输出“ Roberto”而不是“ Clemente”。有什么方法可以访问子项?说:
fn main() {
println!("{nombre} le gusta el {actividad}",nombre= {"Clemente";"Roberto"},actividad= "futbol");
}
解决方法
{"Clemente";"Roberto"}
是block expression,不是任何对象或值。这意味着打开和关闭的小卷发之间的所有内容都被视为独立的statement。与
fn main() {
let s = {
"Clemente";
"Roberto" // the return value
}; // s is set to "Roberto"
println!("{nombre} le gusta el {actividad}",nombre=s,actividad= "futbol");
}
因此,当println!
计算格式参数时,它仅接收返回的"Roberto"
,因此将被打印。除非对该外部作用域的值进行了突变,否则该块中的所有其他内容都会丢失。
如果您打算将两个名称存储在collection中,并使用索引打印一个或另一个,则需要定义一个集合和索引:["Clemente","Roberto"][0]
。您无法在格式设置字符串(例如println!({nombre[0]} ...
)中为命名参数编制索引,因为它实际上只是一个被关联值替换的名称。
fn main() {
println!("{nombre} le gusta el {actividad}",nombre=["Clemente","Roberto"][0],actividad="futbol");
}
更好的是,在println!
之前定义集合,以便以后阅读和维护!这不仅是一个建议,而且通常被认为是最佳实践。
fn main() {
let nombres = ["Clemente","Roberto"]];
println!("{nombre} le gusta el {actividad}",nombre=nombres[0],actividad="futbol");
}