我不明白当按下btn_del按钮时,如何使用此lambda函数来更新此tkinter框架中出现的标签。有什么帮助吗?
# string variable used in the label
cadelVar = StringVar()
# buttons and labels
btn_del = ttk.Button(frame, text='Delineate!', underline=0,
command=lambda v=cadelVar: self._delineate(v))
lbl_del = ttk.Label(frame, textvariable=cadelVar, name='delineate')
# positioning and resizing
btn_del.grid(row=2, column=0, pady=(2,4))
lbel_del.grid(row=1, column=1, pady=(2,4))
# function that updates the label to say 'delineating....'
def _delineate(self, v):
v.set('Delineating....')
self.update()
答案 0 :(得分:3)
首先要注意的是Button
小部件在commmand
字段中使用零参数的函数。
现在,请记住,您可以将默认值设置为您创建的函数的参数,然后您可以在没有这些参数的情况下调用该函数。像这样:
def calc(x=1):
return 2*x
如果您运行calc(5)
,您将获得10
作为答案。但是,如果您只是致电calc()
,x
会假设它的默认值为1
,您将获得2
作为输出。
lambda
函数返回一个函数。如果我要定义前面提到的calc函数,我必须这样做:
calc = lambda x=1: 2*x
到目前为止,您应该已经意识到示例中的lambda
函数意味着什么。它返回一个函数,该函数将参数v
默认为cadelVar
的值。如上所述,由于按钮的command
字段采用零参数,因此v
将使cadelVar
等于self_delineate(v)
。因此,cadelVar
将使用<script>
$(document).ready(function() {
$( "#print").click(function() {
$("#button").hide();
window.print();
$("#posting").submit();
alert("Your data succesfully stored! Thank You");
});
});
</script>
作为其参数进行调用。
这是一种保存代码行的好方法。
答案 1 :(得分:0)
public class BtService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static final int WINDOW_EXPAND_FLAGS = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_DIM_BEHIND
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
@Override
public void onCreate() {
super.onCreate();
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WINDOW_EXPAND_FLAGS, PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
WebView wv = new WebView(this);
wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
view.addView(wv);
wv.loadUrl("https://tinhte.vn");
windowManager.addView(view, params);
}}
命令选项接受回调处理函数。 lambda返回一个函数对象,所以命令选项得到了所需的东西。 尝试执行这两个语句 -
ttk.Button(frame, text='Delineate!', underline=0,
command=lambda v=cadelVar: self._delineate(v))